{
ID:xpycc1
PROG:range
LANG:PASCAL
}
program range;
const
maxn=250;
var
n:integer;
sum:array[0..maxn,0..maxn]of word;
ans:array[1..maxn]of word;
// 越来越有星牛的注释风格了,我喜欢这个风格
procedure iniz;
var
i,j,t:integer;
c:char;
begin
assign(input,'range.in'); reset(input);
readln(n);
for i:=1 to n do //预处理数组sum
begin
t:=0;
for j:=1 to n do
begin
read(c);
if c='1'then inc(t);
sum[j,i]:=sum[j,i-1]+t; //在这里高兴了半天,以为状态转移学得很好
end;
readln;
end;
close(input);
end;
//
function min(x,y:integer):integer;
begin
if x<y then min:=x
else min:=y;
end;
//
procedure main;
var
i,j,m,k:integer;
begin
for i:=0 to n-2 do
for j:=0 to n-2 do
begin
m:=min(n-i,n-j);
for k:=2 to m do
//判断
if sum[j+k,i+k]+sum[j,i]-sum[j+k,i]-sum[j,i+k]=sqr(k) then
inc(ans[k])
else break;
end;
end;
//
procedure print;
var
i:integer;
begin
assign(output,'range.out'); rewrite(output);
for i:=2 to n do
if ans[i]>0 then writeln(i,' ',ans[i])
else break;
close(output);
end;
//
begin
iniz;
main;
print;
end.