Pagini recente » Cod sursa (job #2833245) | Cod sursa (job #2525797) | Cod sursa (job #1579811) | Cod sursa (job #1233111) | Cod sursa (job #209830)
Cod sursa(job #209830)
program pascal;
var f,g:text;
i,j,m,n,k,q:longint;
a,b:array[1..2001000] of char;
pi,po:array[1..2001000] of longint;
ok:boolean;
procedure citire;
begin
n:=1;
m:=1;
readln(f,a);
while (ord(a[n])<>0) do n:=n+1;
read(f,b);
while (ord(b[m])<>0) do m:=m+1;
n:=n-1;
m:=m-1;
end;
procedure test;
begin
pi[1]:=0;
k:=0;
for i:=2 to n do
begin
while (k>0) and (a[k+1]<>a[i]) do k:=pi[k];
if a[k+1]=a[i] then k:=k+1;
pi[i]:=k;
end;
q:=0;
k:=0;
for i:=1 to n do
begin
while (q>0) and (a[q+1]<>b[i]) do q:=pi[q];
if a[q+1]=b[i] then q:=q+1;
if q=n then begin
k:=k+1;
po[k]:=i-n;
end;
end;
end;
begin
assign(f,'strmatch.in'); reset(f);
assign(g,'strmatch.out'); rewrite(g);
citire;
if n>m then write(g,0)
else
begin
test;
writeln(g,k);
if k>1000 then k:=1000;
for i:=1 to k do write(g,po[i],' ');
end;
close(f);
close(g);
end.