#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
void rotate(vector<vector<char> > &matrix, int n)
{
reverse(matrix.begin(),matrix.end());
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
int temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
int findSquare(vector<vector<char> > matrix, int n)
{
vector<vector<int> > dp(n,vector<int>(n,0));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(i==0 || j==0)
{
if(matrix[i][j] == 'D')
{
dp[i][j] = 1;
}
else
dp[i][j] = 0;
}
else if(matrix[i][j]=='D')
dp[i][j] = min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
else
dp[i][j] = 0;
}
}
int max = 0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(dp[i][j]>max)
max = dp[i][j];
}
}
return max;
}
int findAns(vector<vector<char> > matrix, int n)
{
for(int i=0;i<n;i++)
{
int count = 0;
for(int j=0;j<n;j++)
{
if(matrix[j][i] == 'D')
{
count++;
}
}
for(int j=0;j<count;j++)
{
matrix[j][i] = 'D';
}
for(int j=count;j<n;j++)
{
matrix[j][i] = 'C';
}
}
return findSquare(matrix,n);
}
int main() {
int n;
cin>>n;
vector<vector<char> > matrix(n,vector<char>(n));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
cin>>matrix[i][j];
}
}
int ans1 = findAns(matrix,n);
rotate(matrix,n);
int ans2 = findAns(matrix,n);
rotate(matrix,n);
int ans3 = findAns(matrix,n);
rotate(matrix,n);
int ans4 = findAns(matrix,n);
// cout<<ans1<<" "<<ans2<<" "<<ans3<<" "<<ans4<<endl;
cout<<max(max(ans1,ans2),max(ans3,ans4));
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZW5kbCAnXG4nCgp2b2lkIHJvdGF0ZSh2ZWN0b3I8dmVjdG9yPGNoYXI+ID4gJm1hdHJpeCwgaW50IG4pCnsKCXJldmVyc2UobWF0cml4LmJlZ2luKCksbWF0cml4LmVuZCgpKTsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgl7CgkJZm9yKGludCBqPWkrMTtqPG47aisrKQoJCXsKCQkJaW50IHRlbXAgPSBtYXRyaXhbaV1bal07CgkJCW1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXTsKCQkJbWF0cml4W2pdW2ldID0gdGVtcDsKCQl9Cgl9Cn0KCmludCBmaW5kU3F1YXJlKHZlY3Rvcjx2ZWN0b3I8Y2hhcj4gPiBtYXRyaXgsIGludCBuKQp7Cgl2ZWN0b3I8dmVjdG9yPGludD4gPiBkcChuLHZlY3RvcjxpbnQ+KG4sMCkpOwoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQlmb3IoaW50IGo9MDtqPG47aisrKQoJCXsKCQkJaWYoaT09MCB8fCBqPT0wKQoJCQl7CgkJCQlpZihtYXRyaXhbaV1bal0gPT0gJ0QnKQoJCQkJewoJCQkJCWRwW2ldW2pdID0gMTsKCQkJCX0KCQkJCWVsc2UKCQkJCQlkcFtpXVtqXSA9IDA7CgkJCX0KCQkJZWxzZSBpZihtYXRyaXhbaV1bal09PSdEJykKCQkJCWRwW2ldW2pdID0gbWluKG1pbihkcFtpLTFdW2pdLGRwW2ldW2otMV0pLGRwW2ktMV1bai0xXSkrMTsKCQkJZWxzZQoJCQkJZHBbaV1bal0gPSAwOwoJCX0KCX0KCWludCBtYXggPSAwOwoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQlmb3IoaW50IGo9MDtqPG47aisrKQoJCXsKCQkJaWYoZHBbaV1bal0+bWF4KQoJCQkJbWF4ID0gZHBbaV1bal07CgkJfQoJfQoJcmV0dXJuIG1heDsKfQoKCgppbnQgZmluZEFucyh2ZWN0b3I8dmVjdG9yPGNoYXI+ID4gbWF0cml4LCBpbnQgbikKewoJZm9yKGludCBpPTA7aTxuO2krKykKCXsKCQlpbnQgY291bnQgPSAwOwoJCWZvcihpbnQgaj0wO2o8bjtqKyspCgkJewoJCQlpZihtYXRyaXhbal1baV0gPT0gJ0QnKQoJCQl7CgkJCQljb3VudCsrOwoJCQl9CgkJfQoJCWZvcihpbnQgaj0wO2o8Y291bnQ7aisrKQoJCXsKCQkJbWF0cml4W2pdW2ldID0gJ0QnOwoJCX0KCQlmb3IoaW50IGo9Y291bnQ7ajxuO2orKykKCQl7CgkJCW1hdHJpeFtqXVtpXSA9ICdDJzsKCQl9Cgl9CglyZXR1cm4gZmluZFNxdWFyZShtYXRyaXgsbik7Cn0KCgppbnQgbWFpbigpIHsKCWludCBuOwoJY2luPj5uOwoJdmVjdG9yPHZlY3RvcjxjaGFyPiA+IG1hdHJpeChuLHZlY3RvcjxjaGFyPihuKSk7Cglmb3IoaW50IGk9MDtpPG47aSsrKQoJewoJCWZvcihpbnQgaj0wO2o8bjtqKyspCgkJewoJCQljaW4+Pm1hdHJpeFtpXVtqXTsKCQl9Cgl9CglpbnQgYW5zMSA9IGZpbmRBbnMobWF0cml4LG4pOwoJcm90YXRlKG1hdHJpeCxuKTsKCWludCBhbnMyID0gZmluZEFucyhtYXRyaXgsbik7Cglyb3RhdGUobWF0cml4LG4pOwoJaW50IGFuczMgPSBmaW5kQW5zKG1hdHJpeCxuKTsKCXJvdGF0ZShtYXRyaXgsbik7CglpbnQgYW5zNCA9IGZpbmRBbnMobWF0cml4LG4pOwovLwljb3V0PDxhbnMxPDwiICI8PGFuczI8PCIgIjw8YW5zMzw8IiAiPDxhbnM0PDxlbmRsOwoJY291dDw8bWF4KG1heChhbnMxLGFuczIpLG1heChhbnMzLGFuczQpKTsKCXJldHVybiAwOwp9Cg==