program peklo; const MAXN=10000; var N: longint; i: longint; pary: array[1..MAXN] of longint; spojen: array[1..MAXN] of longint; posledni, slepy, slepy2: longint; begin write('Zadejte pocet kabelu: '); readln(N); if N=1 then { Případ N=1 } begin writeln('Uloha je trivialni.'); halt; end; if N=2 then { Případ N=2 } begin writeln('Uloha je neresitelna.'); halt; end; { 1. krok } for i:=1 to (N-1) div 2 do writeln('Propoj a_',2*i-1,' s a_',2*i,' !'); for i:=1 to N do pary[i]:=0; slepy:=0; if (N mod 2)=0 then slepy2:=0; for i:=1 to N do if pary[i]=0 then begin writeln('Se kterym vodicem b_?? je vodive propojen b_',i,'? [0 = s zadnym]'); readln(pary[i]); if pary[i]<>0 then pary[pary[i]]:=i else if slepy=0 then slepy:=i else slepy2:=i; end; { 2. krok } writeln('Zrus vsechna propojeni!'); for i:=1 to (N-1) div 2 do writeln('Propoj a_',2*i,' s a_',2*i+1,' !'); { for i:=1 to N do spojen[i]:=0; } if (N mod 2)=0 then begin writeln('S kolika vodici je vodic b_',slepy,' spojen? S 0 nebo 1?'); readln(i); if i=0 then begin spojen[N]:=slepy; slepy:=slepy2; end else spojen[N]:=slepy2; posledni:=N-1; end else posledni:=N; { A jdeme po dvojicich zpatky ! } while posledni>1 do begin writeln('Se kterym vodicem b_?? je spojen b_',slepy,'?'); readln(i); spojen[posledni]:=slepy; spojen[posledni-1]:=i; slepy:=pary[i]; posledni:=posledni-2; end; spojen[posledni]:=slepy; { Vypiseme vysledek. } for i:=1 to N do writeln('Vodic a_',i,' je spojen s b_',spojen[i],'.'); end.