program svyazniye_componenti; const nVert = 100; nAdj = 1000;
type TVert = array[1..nVert]of integer; tAdj = array[1..nAdj]of integer;
var f : text; n : integer; adj : TAdj; fst ,nbr ,vtx ,mark : TVert; i ,j : integer; yes : boolean;
procedure init(var yes : boolean); var i ,j ,m : integer; begin for i := 1 to n do for j := 1 to nbr[i] do begin yes := false; for m := 1 to n do if adj[fst[i] + j] = vtx[m] then begin yes := true; adj[fst[i] + j] := m; break; end; if not yes then exit; end; end;
procedure component(x ,count : integer); var i ,v : integer; begin mark[x] := count; for i := 1 to nbr[x] do begin v := adj[fst[x] + i]; if mark[v] = 0 then component(v,count); end; end;
procedure conn; var v ,count : integer; begin for v := 1 to n do mark[v] := 0; count := 0; for v := 1 to n do if mark[v] = 0 then begin count := count + 1; component(v,count); end end;
begin assign(f ,'sv_comp.in');reset(f); read(f,n); fst[1] := 0; for i := 1 to n do begin read(f ,vtx[i]); read(f ,nbr[i]); for j := 1 to nbr[i] do read(f ,adj[fst[i] + j]); fst[i + 1] := fst[i] + nbr[i]; end; close(f); assign(f ,'sv_comp.out');rewrite(f); init(yes); if not yes then begin writeln(f ,'error'); close(f); exit; end; conn; for i := 1 to n do write(f ,vtx[i] : 3);writeln(f); for i := 1 to n do write(f ,mark[i] : 3); close(f); end.