#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int p = 31;
const int MOD = 1e9 + 9277;
const int N = 1e6 + 5;
int n;
string s;
int p_pow[N], h[N];
void precompute() {
p_pow[0] = 1;
for (int i = 1; i <= n; i++) {
p_pow[i] = 1ll * p_pow[i - 1] * p % MOD;
}
for (int i = 1; i <= n; i++) {
h[i] = (1ll * h[i - 1] * p + (s[i] - 'a' + 1)) % MOD;
}
}
int getHash(int l, int r) {
return (h[r] - 1ll * h[l - 1] * p_pow[r - l + 1] % MOD + MOD) % MOD;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> s;
n = s.size();
s = ' ' + s;
precompute();
for (int len = 1; len <= n; len++) {
if (getHash(1, n - len) == getHash(1 + len, n)) {
cout << len << ' ';
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IHAgPSAzMTsgIApjb25zdCBpbnQgTU9EID0gMWU5ICsgOTI3NzsgIApjb25zdCBpbnQgTiA9IDFlNiArIDU7IAoKaW50IG47IApzdHJpbmcgczsgCgppbnQgcF9wb3dbTl0sIGhbTl07IAoKdm9pZCBwcmVjb21wdXRlKCkgewoJcF9wb3dbMF0gPSAxOyAKCWZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewoJCXBfcG93W2ldID0gMWxsICogcF9wb3dbaSAtIDFdICogcCAlIE1PRDsgCgl9CgoJZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CgkJaFtpXSA9ICgxbGwgKiBoW2kgLSAxXSAqIHAgKyAoc1tpXSAtICdhJyArIDEpKSAlIE1PRDsgIAoJfQp9CgppbnQgZ2V0SGFzaChpbnQgbCwgaW50IHIpIHsKCXJldHVybiAoaFtyXSAtIDFsbCAqIGhbbCAtIDFdICogcF9wb3dbciAtIGwgKyAxXSAlIE1PRCArIE1PRCkgJSBNT0Q7IAp9CgppbnQgbWFpbigpIHsKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgCgljaW4udGllKG51bGxwdHIpOyAJCgljaW4gPj4gczsgCgluID0gcy5zaXplKCk7IAoJcyA9ICcgJyArIHM7IAoKCXByZWNvbXB1dGUoKTsgIAoKCWZvciAoaW50IGxlbiA9IDE7IGxlbiA8PSBuOyBsZW4rKykgewoJCWlmIChnZXRIYXNoKDEsIG4gLSBsZW4pID09IGdldEhhc2goMSArIGxlbiwgbikpIHsKCQkJY291dCA8PCBsZW4gPDwgJyAnOyAgCgkJfQoJfQp9