#include <bits/stdc++.h>
#define fo(i, n) for (int i = 0; i < int(n); i++)
#define of(i, n) for (int i = int(n) - 1; i >= 0; i--)
#define Fo(i, l, r) for (int i = int(l); i < int(r); i++)
#define correct(x, y, n, m) (0 <= (x) && (x) < (n) && 0 <= (y) && (y) < (m))
#define all(a) (a).begin(), (a).end()
#define sz(a) int((a).size())
#define pb(a) push_back(a)
#define mp(x, y) make_pair((x), (y))
#define x first
#define y second
#define endl '\n'
#define deb(x) cout << #x << " " << x << endl;
using namespace std;
const int N = 101;
int A[N][N], B[N][N], C[N][N];
int dp[N][N];
int n;
void solve() {
cin >> n;
bool f = 1;
fo(i, n) fo(j, n){
char c; cin >> c;
if(c == 'C' || c == 'c') A[i][j] = 1;
if(c == 'D' || c == 'd') f = 0;
}
if(f){
cout << "0";
return;
}
vector<int> col(n, 0), row(n, 0);
fo(i, n) fo(j, n){
col[i] += A[j][i];
row[i] += A[i][j];
}
// fo(i, n) cout << row[i] << " " << col[i] << endl;
fo(i, n) fo(j, n){
B[i][j] = 1;
C[i][j] = 1;
}
fo(j, n){
of(i, n){
if(col[j] > 0){
B[i][j] = 0;
col[j]--;
}
else break;
}
}
fo(i, n){
fo(j, n){
if(row[i] > 0){
C[i][j] = 0;
row[i]--;
}
else break;
}
}
int mxB = 0, mxC = 0;
fo(i, n) fo(j, n) dp[i][j] = 0;
fo(i, n) dp[i][0] = B[i][0];
fo(j, n) dp[0][j] = B[0][j];
fo(i, n) fo(j, n){
if(i == 0 || j == 0){
mxB = max(mxB, dp[i][j]);
continue;
}
if(B[i][j] == 1){
dp[i][j] = min(dp[i][j - 1], min(dp[i - 1][j], dp[i - 1][j - 1])) + 1;
mxB = max(mxB, dp[i][j]);
}
else dp[i][j] = 0;
}
fo(i, n) fo(j, n) dp[i][j] = 0;
fo(i, n) dp[i][0] = C[i][0];
fo(j, n) dp[0][j] = C[0][j];
fo(i, n) fo(j, n){
if(i == 0 || j == 0){
mxC = max(mxC, dp[i][j]);
continue;
}
if(C[i][j] == 1){
dp[i][j] = min(dp[i][j - 1], min(dp[i - 1][j], dp[i - 1][j - 1])) + 1;
mxC = max(mxC, dp[i][j]);
}
else dp[i][j] = 0;
}
cout << max(mxB, mxC);
// cout << endl;
// cout << mxB << " " << mxC << endl;
// fo(i, n){
// fo(j, n){
// cout << B[i][j] << " ";
// }
// cout << endl;
// }
// cout << endl;
// fo(i, n){
// fo(j, n){
// cout << C[i][j] << " ";
// }
// cout << endl;
// }
}
int main() {
int t = 1;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgZm8oaSwgbikgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnQobik7IGkrKykKI2RlZmluZSBvZihpLCBuKSBmb3IgKGludCBpID0gaW50KG4pIC0gMTsgaSA+PSAwOyBpLS0pCiNkZWZpbmUgRm8oaSwgbCwgcikgZm9yIChpbnQgaSA9IGludChsKTsgaSA8IGludChyKTsgaSsrKQojZGVmaW5lIGNvcnJlY3QoeCwgeSwgbiwgbSkgKDAgPD0gKHgpICYmICh4KSA8IChuKSAmJiAwIDw9ICh5KSAmJiAoeSkgPCAobSkpCiNkZWZpbmUgYWxsKGEpIChhKS5iZWdpbigpLCAoYSkuZW5kKCkKI2RlZmluZSBzeihhKSBpbnQoKGEpLnNpemUoKSkKI2RlZmluZSBwYihhKSBwdXNoX2JhY2soYSkKI2RlZmluZSBtcCh4LCB5KSBtYWtlX3BhaXIoKHgpLCAoeSkpCiNkZWZpbmUgeCBmaXJzdAojZGVmaW5lIHkgc2Vjb25kCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgZGViKHgpIGNvdXQgPDwgI3ggPDwgIiAiIDw8IHggPDwgZW5kbDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBOID0gMTAxOwppbnQgQVtOXVtOXSwgQltOXVtOXSwgQ1tOXVtOXTsKaW50IGRwW05dW05dOwppbnQgbjsKdm9pZCBzb2x2ZSgpIHsKCWNpbiA+PiBuOwoJYm9vbCBmID0gMTsKCWZvKGksIG4pIGZvKGosIG4pewoJCWNoYXIgYzsgY2luID4+IGM7CgkJaWYoYyA9PSAnQycgfHwgYyA9PSAnYycpIEFbaV1bal0gPSAxOwoJCWlmKGMgPT0gJ0QnIHx8IGMgPT0gJ2QnKSBmID0gMDsKCX0KCWlmKGYpewoJCWNvdXQgPDwgIjAiOwoJCXJldHVybjsKCX0KCXZlY3RvcjxpbnQ+IGNvbChuLCAwKSwgcm93KG4sIDApOwoJZm8oaSwgbikgZm8oaiwgbil7CgkJY29sW2ldICs9IEFbal1baV07CgkJcm93W2ldICs9IEFbaV1bal07Cgl9CgkvLyBmbyhpLCBuKSBjb3V0IDw8IHJvd1tpXSA8PCAiICIgPDwgY29sW2ldIDw8IGVuZGw7CglmbyhpLCBuKSBmbyhqLCBuKXsKCQlCW2ldW2pdID0gMTsKCQlDW2ldW2pdID0gMTsKCX0KCWZvKGosIG4pewoJCW9mKGksIG4pewoJCQlpZihjb2xbal0gPiAwKXsKCQkJCUJbaV1bal0gPSAwOwoJCQkJY29sW2pdLS07CgkJCX0KCQkJZWxzZSBicmVhazsKCQl9Cgl9CglmbyhpLCBuKXsKCQlmbyhqLCBuKXsKCQkJaWYocm93W2ldID4gMCl7CgkJCQlDW2ldW2pdID0gMDsKCQkJCXJvd1tpXS0tOwoJCQl9CgkJCWVsc2UgYnJlYWs7CgkJfQoJfQoJaW50IG14QiA9IDAsIG14QyA9IDA7CglmbyhpLCBuKSBmbyhqLCBuKSBkcFtpXVtqXSA9IDA7CglmbyhpLCBuKSBkcFtpXVswXSA9IEJbaV1bMF07CglmbyhqLCBuKSBkcFswXVtqXSA9IEJbMF1bal07CglmbyhpLCBuKSBmbyhqLCBuKXsKCQlpZihpID09IDAgfHwgaiA9PSAwKXsKCQkJbXhCID0gbWF4KG14QiwgZHBbaV1bal0pOwoJCQljb250aW51ZTsKCQl9CgkJaWYoQltpXVtqXSA9PSAxKXsKCQkJZHBbaV1bal0gPSBtaW4oZHBbaV1baiAtIDFdLCBtaW4oZHBbaSAtIDFdW2pdLCBkcFtpIC0gMV1baiAtIDFdKSkgKyAxOwoJCQlteEIgPSBtYXgobXhCLCBkcFtpXVtqXSk7CgkJfQoJCWVsc2UgZHBbaV1bal0gPSAwOwoJfQoJZm8oaSwgbikgZm8oaiwgbikgZHBbaV1bal0gPSAwOwoJZm8oaSwgbikgZHBbaV1bMF0gPSBDW2ldWzBdOwoJZm8oaiwgbikgZHBbMF1bal0gPSBDWzBdW2pdOwoJZm8oaSwgbikgZm8oaiwgbil7CgkJaWYoaSA9PSAwIHx8IGogPT0gMCl7CgkJCW14QyA9IG1heChteEMsIGRwW2ldW2pdKTsKCQkJY29udGludWU7CgkJfQoJCWlmKENbaV1bal0gPT0gMSl7CgkJCWRwW2ldW2pdID0gbWluKGRwW2ldW2ogLSAxXSwgbWluKGRwW2kgLSAxXVtqXSwgZHBbaSAtIDFdW2ogLSAxXSkpICsgMTsKCQkJbXhDID0gbWF4KG14QywgZHBbaV1bal0pOwoJCX0KCQllbHNlIGRwW2ldW2pdID0gMDsKCX0KCWNvdXQgPDwgbWF4KG14QiwgbXhDKTsKCS8vIGNvdXQgPDwgZW5kbDsKCS8vIGNvdXQgPDwgbXhCIDw8ICIgIiA8PCBteEMgPDwgZW5kbDsKCS8vIGZvKGksIG4pewoJLy8gCWZvKGosIG4pewoJLy8gCQljb3V0IDw8IEJbaV1bal0gPDwgIiAiOwoJLy8gCX0KCS8vIAljb3V0IDw8IGVuZGw7CgkvLyB9CgkvLyBjb3V0IDw8IGVuZGw7CgkvLyBmbyhpLCBuKXsKCS8vIAlmbyhqLCBuKXsKCS8vIAkJY291dCA8PCBDW2ldW2pdIDw8ICIgIjsKCS8vIAl9CgkvLyAJY291dCA8PCBlbmRsOwoJLy8gfQp9CgppbnQgbWFpbigpIHsKICAgIGludCB0ID0gMTsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K