Cod sursa(job #116584)

Utilizator m123pop manu m123 Data 18 decembrie 2007 23:30:02
Problema Dusman Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.84 kb
program dusman;{ preONI 2008 runda 2}
label 1;
var f,g:text;
    a,b,n,m,i,k,x,j,ok,nr,o:integer;
    as,ev:boolean;
    d:array[1..1000,1..4] of integer;
    st:array[1..10000] of 0..1000;
begin
assign(f,'dusman.in');reset(f);
assign(g,'dusman.out');rewrite(g);
readln(f,n,k,m) ;
for i:=1 to n do
  for j:=1 to 4 do
  d[i,j]:=0;
for i:=1 to m do
 begin readln(f,a,b);d[a,1]:=d[a,1]+1; d[a,d[a,1]+1]:=b;
                   d[b,1]:=d[b,1]+1; d[b,d[b,1]+1]:=a;end;
nr:=0;
x:=1;st[x]:=0;
while x>0 do
 begin
 repeat
 st[x]:=st[x]+1;
 if st[x]<=n then as:=true
              else as:=false;
 if as then if x=1 then ev:=true
                   else begin
                   ok:=0;
                   for i:=1 to x-1 do
                   if st[i]=st[x] then begin ok:=1 ;break;end;
                   if( d[st[x],1]=0) and (ok=0) then ev:=true
                                else if d[st[x],1]<>0 then
                                   begin
                                   o:=0;
                                   for j:=1 to d[st[x],1] do
                                     if d[st[x],j+1] =st[x-1] then o:=1;
                                   if (o=0) and (ok=0) then ev:=true
                                             else ev:=false;
                                   end
                                   else ev:=false;
                   end;
 until (not as) or (as and ev);
 if as then if x=n then begin nr:=nr+1;
                              if nr =k then begin
                                           for i:=1 to n do
                                           write(g,st[i],' ');
                                           goto 1;
                         end                  end
                    else
                    begin x:=x+1;st[x]:=0; end
         else x:=x-1;
  end;
1:close(g);
close(f);
end.