/**
 * @param {number[][]} grid
 * @return {number}
 */
var equalPairs = function (grid) {
  let rowMap = new Map(), colMap = new Map(), colList = []

  for (let r = 0; r < grid.length; r++) {
    let key = JSON.stringify(grid[r])
    rowMap.set(key, (rowMap.get(key) ?? 0) + 1)
    for (let c = 0; c < grid[r].length; c++) {
      colList[c] = (colList[c] ?? []).concat(grid[r][c])
    }
  }

  for (let i = 0; i < colList.length; i++) {
    let key = JSON.stringify(colList[i])
    colMap.set(key, (colMap.get(key) ?? 0) + 1)
  }

  let pairCount = 0;
  for (let [key, value] of rowMap) {
    if (colMap.has(key)) {
      pairCount += colMap.get(key) * value
    }
  }

  return pairCount
};