program nome (input,output); type stringa = packed array[1..20] of char; TP = record time : integer; bef,aft : stringa; end; var n,m,mintempo : integer; product : integer; patch : array[1..100] of TP; programma,soluzione : stringa; ricordi : array[1..200] of stringa; trovata : boolean; procedure Leggi; var i,j : integer; ch : char; begin for i:=1 to 20 do begin programma[i]:='+'; soluzione[i]:='-'; end; for i:=1 to m do with patch[i] do begin read(time); read(bef[1]); while bef[1]=' ' do read(bef[1]); for j:=2 to n do read(bef[j]); read(aft[1]); while aft[1]=' ' do read(aft[1]); for j:=2 to n do read(aft[j]); readln; end; for i:=n+1 to 20 do programma[i]:='-'; end; function applicabile(q :integer ):boolean; var i : integer; begin applicabile:=true; for i:=1 to n do if patch[q].bef[i]<>'0' then if patch[q].bef[i]<>programma[i] then applicabile:=false; end; procedure esegui(q ,lvl:integer ); var i : integer; begin ricordi[lvl]:=programma; for i:=1 to n do if (patch[q].aft[i]<>'0') then programma[i]:=patch[q].aft[i]; end; { esegui } procedure deesegui(lvl :integer ); begin programma:=ricordi[lvl]; end; { deesegui } function giafatto(lvl :integer ):boolean; var i:integer; begin giafatto:=false; for i:=1 to lvl-1 do if ricordi[i]=programma then giafatto:=true; end; procedure applica(i ,lvl, tempo:integer ); var tmp,j : integer; begin {applicazione} esegui(i,lvl); if (not giafatto(lvl)) and (lvl<20 ) then begin tmp:=tempo+patch[i].time; for j:=1 to m do begin if programma=soluzione then begin trovata:=true; if tmpi) then applica(j,lvl+1,tmp); end; end; end; deesegui(lvl); end; procedure elabora; var i :integer; begin mintempo:=maxint; for i:=1 to m do begin if applicabile(i) then applica(i,1,0) else {nodo terminale} end; end; procedure Scrivi; var i : integer; begin writeln('Product ',product:1); if trovata then writeln('Fastest sequence takes ',mintempo:1,' seconds','.') else writeln('Bugs cannot be fixed.'); writeln; end; begin reset (input,'bugs.in'); product:=0; read(n,m); while ((n<>0) and (m<>0)) do begin trovata:=false; product:=product+1; readln; leggi; elabora; scrivi; read(n,m); end; close(input); end.