program u1002; const di:array['a'..'z']of char=('2','2','2','3','3','3','4','4','1','1', '5','5','6','6','0','7','0','7','7','8','8','8','9','9','9','0'); maxl=1 shl 30-1; var pre,f:array[0..100]of longint; tt,s,t,ss,no:string; i,j,n,l:longint; ans:array[0..100,0..100]of string; dp:array[0..100,0..100]of boolean; procedure print(l,r:longint); begin if l-1<>0 then print(pre[l-1],l-1); write(ans[l,r-l+1],' '); end; begin readln(s); while s<>'-1' do begin for i:=0 to length(s)do f[i]:=maxl; f[0]:=0; fillchar(dp,sizeof(dp),0); fillchar(pre,sizeof(pre),0); readln(n); f[0]:=0; for i:=1 to n do begin ss:=s; readln(t); l:=length(t); tt:=t; no:=''; for j:=1 to l do begin t[j]:=di[t[j]]; no:=no+' ' end; j:=pos(t,ss); while j<>0 do begin dp[j,l]:=true; ans[j,l]:=tt; delete(ss,j,l); insert(no,ss,j); j:=pos(t,ss) end; end; for i:=1 to length(s)do for j:=i downto 1 do if dp[j,i-j+1]and(f[j-1]<>maxl)and(f[j-1]+1<f[i])then begin f[i]:=f[j-1]+1; pre[i]:=j; end; if f[length(s)]=maxl then write('No solution.') else print(pre[length(s)],length(s)); writeln; readln(s) end; end. ... //delete(ss,j,l); insert(no,ss,j); delete(ss,j,1); insert(' ',ss,j); ... |