program rats; const size=4000; type arr = array[1..size] of integer; arr1 = array[0..9] of integer; var a,b : arr; d,p : arr1; i,n,m,count : integer; r,s,t,u,v : integer; outf : text; procedure initial; var i,j,k : integer; begin for i:=1 to size do a[i]:=0; n:=2; k:=0; for i:=1 to n do begin for j:=1 to p[i] do b[k+j]:=d[i]; k:=k+p[i]; end; n:=k; for i:=1 to n do a[i]:=b[n+1-i]; m:=n; end; procedure sort; var i,j : integer; num : arr1; begin for i:=0 to 9 do num[i]:=0; for i:=1 to n do num[a[i]]:=num[a[i]]+1; j:=1; for i:=9 downto 0 do while (num[i]>0) do begin a[j]:=i; num[i]:=num[i]-1; j:=j+1; end; while (a[n]=0) do n:=n-1; end; procedure reverse; var i : integer; begin for i:=1 to size do b[i]:=0; for i:=1 to n do b[i]:=a[n+1-i]; end; procedure add; var c,i,t : integer; begin c:=0; for i:=1 to n+1 do begin t:=a[i]+b[i]+c; a[i]:=t mod 10; c:=t div 10; end; if a[n+1]<>0 then begin n:=n+1; m:=n; end; end; procedure print; var i,c,num : integer; begin num:=a[n]; write(num:0,'_'); write(outf,num:0,'_'); c:=1; for i:=n-1 downto 1 do if (a[i]=num) then c:=c+1 else begin write(c:0,' ',a[i]:0,'_'); write(outf,c:0,' ',a[i]:0,'_'); num:=a[i]; c:=1; end; writeln(c:0); writeln(outf,c:0); end; function test : integer; var st,x,i : integer; begin st := 0; if (n>9) then if (a[n]=1) and (a[n-1]=2) and (a[1]=4) and (a[2]=4) and (a[3]=4) and (a[4]=4) then begin x:=0; for i:=5 to n-2 do if (a[i]<>3) then x:=1; if x=0 then st:=3; end; if (st=0) and (count>200) then st:=2; if (st=0) and (n<=775) then st:=1; test:=st; end; begin assign(outf,'rats12.out'); rewrite(outf); d[1]:=1; d[2]:=2; writeln('Input limits on p[1] and p[2] and limit'); readln(r,s,t,u,v); for p[1]:= r to s do begin for p[2]:= t to u do begin if (p[1]>v) or (p[2]>v) then begin initial; count:=0; repeat reverse; add; sort; count:=count+1; until (test>0); if (test=2) and (n>400) then begin write(outf,d[1],'_',p[1],' ',d[2],'_',p[2],' '); write(d[1],'_',p[1],' ',d[2],'_',p[2],' '); print; end; end; end; end; close(outf); end.