#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
#define mod 1000000009LL
#define base 257
struct hashed_string{
    private:
    string s; ll n;
    vector <ll> prefix;
    vector <ll> pow;
    public:
    hashed_string(string a){
        s = a; n = a.size();
        prefix.assign(n, 0);
        ll sum = 0;
        pow.assign(n+1, 0);
        pow[0] = 1;
        for (int i = 1; i <= n; i++){
            pow[i] = (pow[i-1] * base) % mod;
        }
        for (int i = 0; i < n; i++){
            prefix[i] = ((sum * base) % mod + s[i] - 'a') % mod;
            sum = prefix[i];
        }
    }
    ll get_hash(ll l, ll r){
        ll x = prefix[r];
        if (l >= 1){
            l--;
            x = ((x - prefix[l] * pow[r - l] % mod) % mod + mod) % mod;
        }
        return x;
    }
};
void solve(){
    string s;
    cin >> s;
    ll n = s.size();
    vector <ll> answ;
    hashed_string v(s);
    for (int i = 0; i < n; i++){
        ll cur = v.get_hash(0, i);
        ll sz = i + 1;
        bool flag = true;
        for (int j = 0; j + sz - 1 < n; j+=sz){
            if (!(cur == v.get_hash(j, j + sz - 1))){
                flag = false;
                break;
            }
        }
        if (n % sz >= 1){
            ll left_over = n % sz;
            flag = flag && (v.get_hash(n - left_over, n-1) == v.get_hash(0, left_over - 1));
        }
        if (flag) answ.push_back(sz);
    }
    for (auto &p : answ){
        cout << p << " ";
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
    return 0;
}