#include<iostream>
#include<string>
#include<vector>
using namespace std;
void getnext(int next[], string str)
{
int j = 0;
next[0] = 0;
for (int i = 1; i < str.size(); i++)
{
while (j > 0 && str[i] != str[j])
j = next[j - 1];
if (str[i] == str[j])
j++;
next[i] = j;
}
}
int main() {
string str;
cin >> str;
int* arr = new int[str.size()];
getnext(arr, str);
for (int i = 0; i < str.size(); i++)
{
cout << arr[i] << " ";
}
system("pause");
}
#include<iostream>
#include<string>
#include<vector>
using namespace std;
void getnext(int next[], string str)
{
int j = 0;
next[0] = 0;
for (int i = 1; i < str.size(); i++)
{
while (j > 0 && str[i] != str[j])
j = next[j - 1];
if (str[i] == str[j])
j++;
next[i] = j;
}
}
int main() {
string str;
cin >> str;
int* arr = new int[str.size()];
getnext(arr, str);
for (int i = 0; i < str.size(); i++)
{
cout << arr[i] << " ";
}
system("pause");
}