3
int numMagicSquaresInside(vector<vector<int>> &grid) {5
for (int i = 0; i < grid.size(); i++) {6
for (int j = 0; j < grid[i].size(); j++) {7
if (isMagicSquare(grid, i, j)) {14
bool isMagicSquare(vector<vector<int>> &grid, int i, int j) {15
if (i + 2 < grid.size() && j + 2 < grid[i].size()) {16
int col1 = grid[i][j] + grid[i + 1][j] + grid[i + 2][j];17
int col2 = grid[i][j + 1] + grid[i + 1][j + 1] + grid[i + 2][j + 1];18
int col3 = grid[i][j + 2] + grid[i + 1][j + 2] + grid[i + 2][j + 2];19
int row1 = grid[i][j] + grid[i][j + 1] + grid[i][j + 2];20
int row2 = grid[i + 1][j] + grid[i + 1][j + 1] + grid[i + 1][j + 2];21
int row3 = grid[i + 2][j] + grid[i + 2][j + 1] + grid[i + 2][j + 2];22
int diag1 = grid[i][j] + grid[i + 1][j + 1] + grid[i + 2][j + 2];23
int diag2 = grid[i + 2][j] + grid[i + 1][j + 1] + grid[i][j + 2];24
if ((col1 == col2) && (col1 == col3) && (col1 == row1) && (col1 == row2) && (col1 == row3) &&25
(col1 == diag1) && (col1 == diag2)) {26
set<int> s({1, 2, 3, 4, 5, 6, 7, 8, 9});27
for (int r = 0; r < 3; r++) {28
for (int c = 0; c < 3; c++) {29
s.erase(grid[i + r][j + c]);