#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int INF = 1e9;
int n;
int a[22][22]; // 初始矩阵
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
string s;
cin >> s;
for (int j = 1; j <= n; j++) {
a[i][j] = s[j-1] - '0';
}
}
int ans = INF;
int total_masks = 1 << n;
// 用于存储行的数组,多出两个边界元素(索引0和n+1)方便处理
int prev_row[22], curr_row[22], next_row[22];
for (int mask = 0; mask < total_masks; mask++) {
// 初始化prev_row全0
memset(prev_row, 0, sizeof(prev_row));
// 设置curr_row为mask对应的第一行操作
memset(curr_row, 0, sizeof(curr_row));
for (int j = 1; j <= n; j++) {
curr_row[j] = (mask >> (j-1)) & 1;
}
int total_ops = __builtin_popcount(mask); // 第一行的操作次数
// 逐行确定剩余行的操作
for (int i = 1; i < n; i++) {
// 计算下一行操作
memset(next_row, 0, sizeof(next_row));
for (int j = 1; j <= n; j++) {
next_row[j] = a[i][j] ^ curr_row[j] ^ prev_row[j] ^ curr_row[j-1] ^ curr_row[j+1];
}
// 累加下一行的操作次数
for (int j = 1; j <= n; j++) {
total_ops += next_row[j];
}
// 更新行:当前行变为上一行,下一行变为当前行
memcpy(prev_row, curr_row, sizeof(curr_row));
memcpy(curr_row, next_row, sizeof(next_row));
}
// 验证最后一行是否满足全0条件
bool ok = true;
for (int j = 1; j <= n; j++) {
int val = curr_row[j] ^ prev_row[j] ^ curr_row[j-1] ^ curr_row[j+1];
if (val != a[n][j]) {
ok = false;
break;
}
}
if (ok) {
ans = min(ans, total_ops);
}
}
if (ans == INF) {
cout << -1 << endl;
} else {
cout << ans << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBJTkYgPSAxZTk7CmludCBuOwppbnQgYVsyMl1bMjJdOyAvLyDliJ3lp4vnn6npmLUKCmludCBtYWluKCkgewogICAgY2luID4+IG47CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBzdHJpbmcgczsKICAgICAgICBjaW4gPj4gczsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuOyBqKyspIHsKICAgICAgICAgICAgYVtpXVtqXSA9IHNbai0xXSAtICcwJzsKICAgICAgICB9CiAgICB9CiAgICBpbnQgYW5zID0gSU5GOwogICAgaW50IHRvdGFsX21hc2tzID0gMSA8PCBuOwogICAgLy8g55So5LqO5a2Y5YKo6KGM55qE5pWw57uE77yM5aSa5Ye65Lik5Liq6L6555WM5YWD57Sg77yI57Si5byVMOWSjG4rMe+8ieaWueS+v+WkhOeQhgogICAgaW50IHByZXZfcm93WzIyXSwgY3Vycl9yb3dbMjJdLCBuZXh0X3Jvd1syMl07CiAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8IHRvdGFsX21hc2tzOyBtYXNrKyspIHsKICAgICAgICAvLyDliJ3lp4vljJZwcmV2X3Jvd+WFqDAKICAgICAgICBtZW1zZXQocHJldl9yb3csIDAsIHNpemVvZihwcmV2X3JvdykpOwogICAgICAgIC8vIOiuvue9rmN1cnJfcm935Li6bWFza+WvueW6lOeahOesrOS4gOihjOaTjeS9nAogICAgICAgIG1lbXNldChjdXJyX3JvdywgMCwgc2l6ZW9mKGN1cnJfcm93KSk7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CiAgICAgICAgICAgIGN1cnJfcm93W2pdID0gKG1hc2sgPj4gKGotMSkpICYgMTsKICAgICAgICB9CiAgICAgICAgaW50IHRvdGFsX29wcyA9IF9fYnVpbHRpbl9wb3Bjb3VudChtYXNrKTsgLy8g56ys5LiA6KGM55qE5pON5L2c5qyh5pWwCiAgICAgICAgLy8g6YCQ6KGM56Gu5a6a5Ymp5L2Z6KGM55qE5pON5L2cCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgLy8g6K6h566X5LiL5LiA6KGM5pON5L2cCiAgICAgICAgICAgIG1lbXNldChuZXh0X3JvdywgMCwgc2l6ZW9mKG5leHRfcm93KSk7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgewogICAgICAgICAgICAgICAgbmV4dF9yb3dbal0gPSBhW2ldW2pdIF4gY3Vycl9yb3dbal0gXiBwcmV2X3Jvd1tqXSBeIGN1cnJfcm93W2otMV0gXiBjdXJyX3Jvd1tqKzFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIOe0r+WKoOS4i+S4gOihjOeahOaTjeS9nOasoeaVsAogICAgICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuOyBqKyspIHsKICAgICAgICAgICAgICAgIHRvdGFsX29wcyArPSBuZXh0X3Jvd1tqXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyDmm7TmlrDooYzvvJrlvZPliY3ooYzlj5jkuLrkuIrkuIDooYzvvIzkuIvkuIDooYzlj5jkuLrlvZPliY3ooYwKICAgICAgICAgICAgbWVtY3B5KHByZXZfcm93LCBjdXJyX3Jvdywgc2l6ZW9mKGN1cnJfcm93KSk7CiAgICAgICAgICAgIG1lbWNweShjdXJyX3JvdywgbmV4dF9yb3csIHNpemVvZihuZXh0X3JvdykpOwogICAgICAgIH0KICAgICAgICAvLyDpqozor4HmnIDlkI7kuIDooYzmmK/lkKbmu6HotrPlhagw5p2h5Lu2CiAgICAgICAgYm9vbCBvayA9IHRydWU7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CiAgICAgICAgICAgIGludCB2YWwgPSBjdXJyX3Jvd1tqXSBeIHByZXZfcm93W2pdIF4gY3Vycl9yb3dbai0xXSBeIGN1cnJfcm93W2orMV07CiAgICAgICAgICAgIGlmICh2YWwgIT0gYVtuXVtqXSkgewogICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChvaykgewogICAgICAgICAgICBhbnMgPSBtaW4oYW5zLCB0b3RhbF9vcHMpOwogICAgICAgIH0KICAgIH0KICAgIGlmIChhbnMgPT0gSU5GKSB7CiAgICAgICAgY291dCA8PCAtMSA8PCBlbmRsOwogICAgfSBlbHNlIHsKICAgICAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0=