#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <unordered_set>
#define ull unsigned long long
#define ll long long
#define pii pair<ll ,ll>
#define ft first
#define sd second
#define pr pair
#define cy cout<<"Yes"<<endl
#define cn cout<<"No"<<endl
#define forn(i,n) for(int (i)=0;(i)<(n);(i)++)
#define forne(i,n) for(int (i)=1;(i)<=(n);(i)++)
#define rforn(i,n) for(int (i)=(n-1);(i)>=(0);(i)--)
#define rforne(i,n) for(int (i)=(n);(i)>=(1);(i)--)
#define sorta(a) sort((a).begin(),(a).end())
#define sortcmp(a,cmp) sort((a).begin(),(a).end(),cmp)
#define vv vector
const int inf = 0x4f4f4f4f;
const int N = 2e5 + 5;
ll t;
void solve() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s, ss; cin >> s >> ss;
vector<int>ne(ss.size());
ne[0] = -1;
for (int i = 1, j = -1; i < ss.size(); i++) {
while (j != -1 && ss[i] != ss[j + 1])
j = ne[j];
if (ss[i] == ss[j + 1])
j++;
ne[i] = j;
}
vv<int>rs(10 * N); int cnt = 0;
for (int i = 0, j = -1; i < s.size(); i++) {
while (j != -1 && s[i] != ss[j + 1])
j = ne[j];
if (s[i] == ss[j + 1])
j++;
if (j == ss.size() - 1){
rs[cnt++] = i - j;
i -= (ne[j] + 1);
j = -1;
}
}
forn(i, cnt)
cout << rs[i] + 1<< endl;
for (auto a : ne)
cout << a + 1<< " ";
}
int main() {
t = 1;
while (t--)
solve();
return 0;
}