1 #include<stdio.h>
2 #include<string.h>
3
4 char a[6][6];
5 int v[6][6],hash[6][6];//V标记是否已经放过,hash标记是否此位置是否进入过队列
6 int n,sum,max;
7
8 struct N
9 {
10 int x,y;
11 };
12
13
14 int judge(int x,int y)
15 {
16 int i,j;
17 for(i = x+1; i <= n; i++)
18 if(v[i][y]) return 0;
19 else if(a[i][y] == 'X') break;
20 for(i = x-1; i >= 1; i--)
21 if(v[i][y]) return 0;
22 else if(a[i][y] == 'X') break;
23 for(i = y+1; i <= n; i++)
24 if(v[x][i]) return 0;
25 else if(a[y][i] == 'X') break;
26 for(i = y-1; i >= n; i--)
27 if(v[x][i]) return 0;
28 else if(a[x][i] == 'X') break;
29 return 1;
30 }
31
32 void bfs(int x,int y)
33 {
34 int i,j;
35 sum = 0;
36 struct N q[5000],t1,t;
37 q[0].x = x;
38 q[0].y = y;
39 int s = 0,e = 1;
40 int fx[] = {-1,-1, 1, 1};
41 int fy[] = { 1,-1,-1, 1};
42 while(s != e)
43 {
44 t.x = q[s].x;
45 t.y = q[s].y;
46 s++;
47 if(a[t.x][t.y] == '.' && !v[t.x][t.y])
48 {
49 if(judge(t.x,t.y))
50 {
51 v[t.x][t.y] = 1;
52 sum++;
53 }
54 }
55 for(i = 0;i < 4; i++)
56 {
57 t1.x = t.x + fx[i];
58 t1.y = t.y + fy[i];
59 if(t1.x >= 1 && t1.x <= n && t1.y >= 1 && t1.y <= n && !hash[t1.x][t1.y])
60 {
61 hash[t1.x][t1.y] = 1;
62 q[e].x = t1.x;
63 q[e].y = t1.y;
64 e++;
65 }
66 }
67 e %= 5000;
68 s %= 5000;
69 }
70 if(max < sum)
71 {
72
73 max = sum;
74 }
75 }
76
77 int main()
78 {
79 int i,j;
80 while(scanf("%d%*c",&n) != EOF && n)
81 {
82 max = 0;
83 for(i = 1;i <= n; i++)
84 scanf("%s",a[i]+1);
85 for(i = 1;i <= n; i++)
86 for(j = 1;j <= n; j++)
87 {
88 memset(v,0,sizeof(v));
89 memset(hash,0,sizeof(hash));
90 if(a[i][j] == '.')
91 {
92 bfs(i,j);
93 }
94 }
95 printf("%d\n",max);
96 }
97 return 0;
98 }