LSFIGHT - Đấu trường VM08
Tác giả: RR
Ngôn ngữ: Pascal
{$R+,Q+}
program LSFIGHT;
const
FINP='';
FOUT='';
MAXN=500;
var
a,d:array[1..MAXN,1..MAXN] of byte;
next:array[1..MAXN] of integer;
n:longint;
procedure inp;
var
f:text;
i,j:integer;
begin
assign(f,FINP); reset(f);
readln(f,n);
for i:=1 to n do
for j:=1 to n do
read(f,a[i,j]);
close(f);
end;
procedure ans;
var
f:text;
count,i:integer;
begin
assign(f,FOUT); rewrite(f);
count:=0;
for i:=1 to n do
if d[i,i]=1 then inc(count);
writeln(f,count);
for i:=1 to n do
if d[i,i]=1 then writeln(f,i);
close(f);
end;
procedure solve;
var
l,i,j,k:integer;
begin
for i:=1 to n do next[i]:=i mod n+1;
for i:=1 to n-1 do d[i,i+1]:=1;
d[n,1]:=1;
for l:=2 to n do
for i:=1 to n do
begin
j:=(i+l) mod n; if j=0 then j:=n;
k:=next[i];
while k<>j do
begin
if (d[i,k]=1) and (d[k,j]=1) then
if (a[i,k]=1) or (a[j,k]=1) then
begin
d[i,j]:=1;
break;
end;
k:=next[k];
end;
end;
end;
begin
inp;
solve;
ans;
end.