class Solution {
  public int matrixScore(int[][] grid) {
    int rows = grid.length;
    int cols = grid[0].length;

    int score = rows * (1 << (cols - 1));

    for (int x = 1; x < cols; ++x) {
      int same = 0;
      for (int y = 0; y < rows; ++y) {
        if (grid[y][x] == grid[y][0]) {
          ++same;
        }
      }

      same = Math.max(same, rows - same);
      score += same * (1 << (cols - x - 1));
    }

    return score;
  }
}