ALADDIN - Aladdin
Tác giả: flashmt
Ngôn ngữ: Pascal
uses math;
const fi='';
maxn=210;
type ar=array[1..maxn,1..maxn] of longint;
var n:longint;
a,b:ar;
qx,qy:array[0..maxn*maxn] of longint;
procedure rf;
var i,j,dem:longint;
begin
read(n);
for i:=1 to n-1 do
for j:=1 to n-1 do
read(b[i,j]);
qx[1]:=1; qy[1]:=1; dem:=1;
for i:=3 to n+n do
for j:=max(1,i-n) to min(n,i-1) do
begin
inc(dem);
qx[dem]:=j; qy[dem]:=i-j;
end;
end;
procedure wf;
var i,j:longint;
begin
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j],' ');
writeln;
end;
halt;
end;
procedure edit(x,y,val:longint);
begin
if x>1 then b[x-1,y]:=b[x-1,y]+val;
if y>1 then b[x,y-1]:=b[x,y-1]+val;
b[x,y]:=b[x,y]+val;
end;
procedure att(p:longint);
var i,j,x,y,xx,yy:longint; c0,c1:boolean;
begin
if p>n*n then wf;
x:=qx[p]; y:=qy[p];
c0:=true; c1:=true;
if (x>1) and (y>1) then
begin
if b[x-1,y-1]<>0 then c0:=false;
if b[x-1,y-1]<>1 then c1:=false;
end;
if c0 then
begin
a[x,y]:=0;
att(p+1);
end;
if c1 then
begin
a[x,y]:=1;
edit(x,y,-1);
att(p+1);
edit(x,y,1);
end;
end;
procedure pr;
begin
att(1);
writeln('No solution');
end;
begin
assign(input,fi); reset(input);
rf;
pr;
close(input);
end.