{ Runtime library for the graphomaton (c) 2006 Martin Mares <mj@ucw.cz> }

const MAXN = 100;
var   V, Vprev: array [1..MAXN] of vertex;
      E: array [1..MAXN, 1..deg] of MAXN;
      N: 0..MAXN;

procedure read_in;
var i, j, k: integer;
begin
   read(N);
   for i:=1 to N do begin
      for j:=1 to deg do
         read(E[i,j]);
      read(V[i].x);
   end;
   for i:=1 to N do begin
      for j:=1 to deg do begin
         V[i].s[j] := @V[E[i,j]];
         k := 1;
         while (k <= deg) and (E[E[i,j],k] <> i) do
            inc(k);
         if k > deg then begin writeln('Input inconsistent: no opposite edge for ', i, '#', j); halt(1); end;
         V[i].s[j] := @Vprev[E[i,j]];
         V[i].p[j] := k;
      end;
      init(@V[i]);
   end;
end;

procedure dump_all;
var i, j: integer;
begin
   for i:=1 to N do begin
      write(i);
{
      write(' (');
      for j:=1 to deg do begin
         if j>1 then write(',');
         write(E[i,j]);
      end;
      write(')');
}
      write(#9, 'x=', V[i].x);
      dump(@V[i]);
      writeln(' stop=', ord(V[i].stop));
   end;
end;

procedure iterate;
var i, it, nstop: integer;
begin;
   it := 0;
   writeln('### Initial configuration ###');
   dump_all;
   repeat
      inc(it);
      nstop := 0;
      Vprev := V;
      for i := 1 to N do begin
         run(@V[i]);
         if V[i].stop then inc(nstop);
      end;
      writeln('### Iteration ', it, ' ###');
      dump_all;
   until nstop = N;
end;

begin
   read_in;
   iterate;
end.
