


program domino;

var
pole:array[1..7,1..7,1..2] of integer;
cisla: array[1..7] of integer;
a,b,i,pocet,x,i1,i2,error,i3 :integer;
fronta:array[1..100,1..2] of integer;

procedure testovanie(r,s :integer);
begin

for i:=1 to 7 do begin
if i<r then begin  			{Tu sa otestujú dominá s číslom r na domine v riadku}
if (pole[r,i,1]>0) and (pole[r,i,2]=0) then begin inc(i2); inc(i3); fronta[i2,1]:=r; fronta[i2,2]:=i;  end;
pole[r,i,2]:=1;
end
else begin 				{Tu sa otestujú dominá s číslom r na domine v stĺpci}
if (pole[i,r,1]>0) and (pole[i,r,2]=0) then begin inc(i2); inc(i3); fronta[i2,1]:=i; fronta[i2,2]:=r;  end;
pole[i,r,2]:=1;
end;



if i<s then begin			{Tu sa otestujú dominá s číslom s na domine v riadku}
if (pole[s,i,1]>0) and (pole[s,i,2]=0) then begin inc(i2); inc(i3); fronta[i2,1]:=s; fronta[i2,2]:=i; end;
pole[s,i,2]:=1;
end
else begin				{Tu sa otestujú dominá s číslom s na domine vstĺpci}
if (pole[i,s,1]>0) and (pole[i,s,2]=0) then begin inc(i2); inc(i3); fronta[i2,1]:=i; fronta[i2,2]:=s; end;
pole[i,s,2]:=1;
end;
end;


end;
{----------------------------------------------------koniec procedury testovanie--------------------------}

procedure fronta1(); 			{z nájdených domín testujeme, či sa pomocou nich vieme dostať k iným - pomocou nich pripojiť iiné dominá k radu}
begin
i1:=0;{}
repeat
inc(i1);
until fronta[i1,1]<>0; 			{nájdeme vo fronte domino a testujeme}
testovanie(fronta[i1,1],fronta[i1,2]);
dec(i3);				{znižime počet domín o 1 vo fronte - domino už bolo testované}
fronta[i1,1]:=0;			{vymažeme domino z fronty}
end;

{////////////////////////////////////////////////koniec procedur//////////////////////////////////////////////////////////}

begin
readln(pocet);
for i:=1 to pocet do begin						{nacitavanie vstupu}
readln (a,b);
if a<b then
inc(pole[b+1,a+1,1])							{Ak bude a<b tak zvýšime počet v b riadku a a stĺpci a ak nie tak v b stĺpci a a riadku - samozrejme v nasledujúcich riadkoch musíme a aj b zvýšiť o 1 aby sme nešli mimo poľa}
else
inc(pole[a+1,b+1,1]);
if a<>b then begin							{Iba ak to nebude špeciálne domino}
inc(cisla[a+1]);								
inc(cisla[b+1]);
end;
end;


for i:=1 to 7 do
x:=x+cisla[i] mod 2;							{testovanie poctu neparnych cisel}

if (not((x=0) or (x=2))) then error:=1					{rad musí mať buď 0 koncov, alebo 2,(0 koncov - je to kruh - dá sa hocikde rozpojiť) - nemože mať iný počet koncov}
else begin




i:=0;
repeat									{najdenie zaciatku - nejakého domina, od ktorého budeme postupovať ďalej}
inc(i);
i1:=0;
Repeat
inc(i1);
until (pole[i,i1,1]>0) or (i1=7);
until pole[i,i1,1]>0;



testovanie(i,i1);							{Prvý krát spustíme testovanie - aby fronta nebola prázna - ak existujú viac ako 0 domín}

repeat									{Potom sa bude opakovať procedura fronta1 toľko, pokým nebudú otestované všetky nájdené dominá}
fronta1();
until i3=0;

for i:=1 to 7 do begin							{Otestuje sa či sa vieme dostať ku každému dominu}
for i1:=1 to 7 do begin
if (pole[i1,i,2]=0) and (pole[i1,i,1]>0) then begin error:=1;end;	{Ak nie nedájú sa dominá pokladať - ptretože sa nevieme ku niektorým dostať}

end;
end;
end;




if error=1 then writeln('Neda sa')
else begin								{vypisanie ci sa da alebo nie}
writeln('Da sa');							{Ak sa dá domino pokladať - pokračujeme}

if x=2 then begin							{Prípad, keď má rad začiatok a koniec}


i:=0;
repeat									{zistenie neparnych cisel}
inc(i);
until cisla[i] mod 2=1;
a:=i;									{Nájdeme číslo, ktoré musí byť na začiatku radu}
repeat
inc(i);
until cisla[i] mod 2=1;
b:=i;									{Nájdeme číslo, ktoré má byť na konci radu}


x:=a;									{x predstavuje číslo, s ktorým sa budú hľadať dominá - nastaví sa začiatok}
i1:=0;
repeat
inc(i1);
until ((pole[i1,b,1]>0) or (pole[b,i1,1]>0)) and (i1<>b);		{nájde sa koniec - domino ktoré má byť na konci okrem špeciálneho - nejaké pred ním musí byť}		
if b<i1 then dec(pole[i1,b,1])						{Zníži sa počet tých to domín - vymaže sa toto domino zo zoznamu aby nebolo vypísané skôr ako má byť - rad by sa ukončil skôr}
else dec(pole[b,i1,1]);

end
else begin







i:=0;									{Ak rad nemá začiatok a koniec - nájde sa nejaké domino - prvé ktoré nám príde pod ruku}
repeat
inc(i);
i1:=0;
repeat
inc(i1);
until (pole[i,i1,1]>0) or (pole[i1,i,1]>0) or (i1=6);
until (pole[i,i1,1]>0) or (pole[i1,i,1]>0);
x:=i;
if cisla[1]+cisla[2]+cisla[3]+cisla[4]+cisla[5]+cisla[6]+cisla[7]=0		{Ak existujú len špeciálne domina - hneď sa vypíšu a nemusí zbehnuť ani cyklus výpisu}
then for i:=1 to pole[x,x,1] do write(x-1,x-1,' ');				{Vždy keď budeme niečo vypisovať musíme zo znížiť o 1 keďže sme pri vstupe všetko zvýšili o 1}

end;


i3:=(cisla[1]+cisla[2]+cisla[3]+cisla[4]+cisla[5]+cisla[6]+cisla[7]) div 2;	{Keďže dominá obsahujú 2 čísla - tak div 2 - nerátajú sa tu špeciálne dominá}

for i:=1 to i3 do begin


if pole[x,x,1]>0 then begin						{Tu prebehne výpis špeciálnych domín - ak existujú}
for i1:=1 to pole[x,x,1] do write(x-1,x-1,' ');
pole[x,x,1]:=0;
end;

i1:=0;									{Nájde sa domino ktoré obsahuje x, a pre ukončenie repeatu som musel požiť i1=6 - a to v tom prípade že domino sa nenájde
 - a to len v tom prípade keď bude vymazané - a to len keď bude daný koniec domina - znamená to, že sa vypíše posledné domino}
repeat
inc(i1);
until (pole[i1,x,1]>0) or (pole[x,i1,1]>0) or (i1=6);


if (i1=6) and (i=i3) then begin						{Ak sa má vypísať posledné domino -  vypíše sa tak, že bude určite obsahovať číslo ktoré bolo na konci radu a číslo b - číslo ktorým sa má rad končiť}				
write(x-1,b-1,' ');
if pole[b,b,1]>0 then 							{Ak ešte existujú špeciálne dominá vypíšu sa - nedalo sa vypísať skôr}
for i1:=1 to pole[b,b,1] do write(b-1,b-1,' ');
end
else begin


write(x-1,i1-1,' ');							{Ak to nemá byť posledné domino tak sa vypíše a zniži sa počet týchto domín - vymaže sa toto domino}
if x<i1 then dec(pole[i1,x,1])
else
dec(pole[x,i1,1]);
x:=i1;






end;
end;






end;
readln;

end.
