program karcas; Uses crt; var a:array[1..100,1..100] of integer; Nnew:array[1..100] of boolean; Tree:array[1..2,1..100] of integer; Turn:array[1..100] of integer; n,i,j, u, d, numb:integer; inp ,outp : text; procedure solve(v,q:integer); var j:integer; begin if d >= u then exit; j:=q; while (j <= n) and (numb < n-1) do begin if (a[v,j] <> 0) and Nnew[j] then begin Nnew[j]:=false; inc(numb); Tree[1,numb]:=v;Tree[2,numb]:=j; Turn[u]:=j;inc(u); solve(v,j+1); dec(u);Nnew[j]:=true;dec(numb); end; inc(j); end; if numb = n-1 then begin writeln; for i:=1 to numb do begin write('(',Tree[1,i],' ',Tree[2,i],')'); if Tree[2, i]<>Tree[1, i+1] then writeln; end; exit; end; if j = n+1 then begin inc(d); solve(Turn[d],1); dec(d); end; end; begin clrscr; assign(inp, 'Graph.dat'); assign(outp, 'Graph.sol'); reset(inp); rewrite(outp); readln(n); for i:=1 to n do for j:=1 to n do read(a[i,j]); fillchar(Nnew,sizeof(Nnew),true); fillchar(Tree,sizeof(Tree),0); Nnew[1]:=false; Turn[1]:=1;d:=1;u:=2;numb:=0; solve(1,2); close(inp); close(outp); end.