Cod sursa(job #465878)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 25 iunie 2010 13:45:12
Problema Mesaj4 Scor 0
Compilator fpc Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 1 Marime 1.65 kb
program p1;
type copil=record nod,pz:longint;m:shortint;end;
     relatii=record x,y:longint;end;
var f,g:text;
    a:array[1..1000,1..1000] of shortint;
    r:array[1..1000] of longint;
    c:array[1..1000] of copil;
    afis:array[1..1000] of relatii;
    viz:array[1..1000] of shortint;
    i,n,m,x,y,max,im,p,u,ok,na:longint;

procedure vezi(x:longint);
var y:longint;
begin
     while c[x].pz>0 do
     begin
          writeln(g,c[x].nod,' ',c[c[x].pz].nod);
          na:=na+1;
          afis[na].x:=c[x].nod;
          afis[na].y:=c[c[x].pz].nod;
          c[x].m:=1;
          x:=c[x].pz;
     end;
end;

begin
    assign(f,'mesaj4.in');reset(f);
    assign(g,'mesaj4.out');rewrite(g);
    read(f,n,m);
    for i:=1 to m do
    begin
        read(f,x,y);
        if a[x,y]=0 then
        begin
        r[x]:=r[x]+1;
        r[y]:=r[y]+1;
        a[x,y]:=1;
        a[y,x]:=1;
        end;
    end;
    max:=r[1];im:=1;
    for i:=2 to n do
        if r[i]>max then begin max:=r[i];im:=i;end;
    c[1].nod:=im;
    viz[im]:=1;
    p:=1;u:=1;na:=0;
    while p<=u do
    begin
        for i:=1 to n do
        if (a[c[p].nod,i]=1)and(viz[i]=0) then
        begin
             u:=u+1;
             c[u].nod:=i;
             viz[i]:=1;
             c[u].pz:=p;
        end;
        p:=p+1;
    end;
    ok:=(n-1)*2;
    for i:=1 to n do
        if viz[i]=0 then begin ok:=-1; break;end;
    writeln(g,ok);
    if ok>0 then
    begin
    for i:=u downto 1 do
        if c[i].m=0 then vezi(i);
    for i:=n-1 downto 1 do
        writeln(g,afis[i].y,' ',afis[i].x);
    end;
    close(f);
    close(g);
end.