<Problem>
https://oj.vnoi.info/problem/bchess
#include <iostream>
using namespace std;
#define MAX 2001
int main() {
int n;
cin >> n;
char ch[MAX][MAX];
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
cin >> ch[i][j];
}
}
int f[MAX][MAX];
for (int i = 1; i <= n; i++) {
f[1][i] = 1;
f[i][1] = 1;
}
int m1 = 0, m2 = 0, m3 = 0;
int c1 = 0, c2 = 0, c3 = 0;
// 1 - den, 0 - trang
for (int i = 2; i <= n; i++) {
for (int j = 2; j <= n; j++) {
if (ch[i - 1][j - 1] == ch[i][j] && ch[i - 1][j] != ch[i][j]
&& ch[i][j - 1] != ch[i][j])
f[i][j] = min(min(f[i - 1][j - 1], f[i - 1][j]), f[i][j - 1]) + 1;
else f[i][j] = 1;
if (ch[i][j] == '1' && m2 < f[i][j] - 1 + f[i][j] % 2) {
m2 = f[i][j] - 1 + f[i][j] % 2;
}
if (ch[i][j] == '0' && m3 < f[i][j] - 1 + f[i][j] % 2) {
m3 = f[i][j] - 1 + f[i][j] % 2;
}
if (m1 < f[i][j] - f[i][j] % 2) {
m1 = f[i][j] - f[i][j] % 2;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (m1 != 0 && m1 <= f[i][j]) c1++;
if (m2 != 0 && ch[i][j] == '1' && m2 <= f[i][j]) c2++;
if (m3 != 0 && ch[i][j] == '0' && m3 <= f[i][j]) c3++;
}
}
cout << m1 << " " << c1 << endl;
cout << m2 << " " << c2 << endl;
cout << m3 << " " << c3 << endl;
return 0;
}