int n, m;
char a[MAX_N | 1];
char b[MAX_M | 1];
int p[MAX_M | 1];
inline void Init()
{
p[0] = -1;
for(register int i = 0, j = -1; i + 1 < m; ++i)
{
while(j >= 0 && b[i + 1] ^ b[j + 1]) j = p[j];
if(b[i + 1] == b[j + 1]) ++j;
p[i + 1] = j;
}
return;
}
inline void KMP()
{
for(register int i = -1, j = -1; i + 1 < n; ++i)
{
while(j >= 0 && a[i + 1] ^ b[j + 1]) j = p[j];
if(a[i + 1] == b[j + 1]) ++j;
if(j + 1 == m) printf("%d\n", i - m + 3), j = p[j];
}
return;
}