/**
* author: orzvanh14
* created: 23.12.2022 10:08:02
* too lazy to update time
**/
// i wants to take ioi
//binhtinhtutinkhongcaycunhungmotkhikhongcontutinnualatuyetvong
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define nn "\n"
#define pi pair<int, int>
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define eb emplace_back
#define pb push_back
#define TASK " "
#define ms(a, x) memset(a, x, sizeof(a))
#define all(a) a.begin(), a.end()
#define All(a, n) a + 1, a + 1 + n
#define LOG 19
const int INF = 1e18;
const int mod = 1e9+7;
const int N = 1e6 + 5;
const int maxN = 1e5 + 5;
int MOD = 998244353;
int bit[200000];
struct node{
int kc, u, hk;
bool operator<(const node& other) const {
return kc > other.kc;
}
};
struct edge{
int u, v, w, id;
friend bool operator < ( edge a, edge b){
return a.w > b.w;
}
};
string s;
int a[N];
void nhap(){
cin >> s;
}
void solve(){
for(int i = 1; i < s.size(); i++){
int j = a[i - 1];
while(j > 0 && s[i] != s[j]){
j = a[j - 1];
}
if(s[i] == s[j]){
j++;
}
a[i] = j;
}
int sz = s.size() - a[s.size() - 1];
int k = 1;
string t = s;
if(s.size() % sz == 0){
k = s.size() / sz;
t = s.substr(0, sz);
}
cout << k << t << nn;
}
signed main() {
// freopen("piggyback.in", "r", stdin);
// freopen("piggyback.out", "w", stdout);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
nhap();
solve();
return 0;
}
LyoqCiAqICAgIGF1dGhvcjogIG9yenZhbmgxNAogKiAgICBjcmVhdGVkOiAyMy4xMi4yMDIyIDEwOjA4OjAyCiAqICAgIHRvbyBsYXp5IHRvIHVwZGF0ZSB0aW1lCioqLwovLyBpIHdhbnRzIHRvIHRha2UgaW9pCi8vYmluaHRpbmh0dXRpbmtob25nY2F5Y3VuaHVuZ21vdGtoaWtob25nY29udHV0aW5udWFsYXR1eWV0dm9uZwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGludCBsb25nIGxvbmcKI2RlZmluZSBubiAiXG4iCiNkZWZpbmUgcGkgcGFpcjxpbnQsIGludD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGxiIGxvd2VyX2JvdW5kCiNkZWZpbmUgdWIgdXBwZXJfYm91bmQKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBUQVNLICIgIgoKI2RlZmluZSBtcyhhLCB4KSBtZW1zZXQoYSwgeCwgc2l6ZW9mKGEpKQojZGVmaW5lIGFsbChhKSBhLmJlZ2luKCksIGEuZW5kKCkKI2RlZmluZSBBbGwoYSwgbikgYSArIDEsIGEgKyAxICsgbgoKI2RlZmluZSBMT0cgMTkKCgpjb25zdCBpbnQgSU5GID0gMWUxODsKY29uc3QgaW50IG1vZCA9IDFlOSs3Owpjb25zdCBpbnQgTiA9IDFlNiAgKyA1Owpjb25zdCBpbnQgbWF4TiA9IDFlNSArIDU7CmludCBNT0QgPSA5OTgyNDQzNTM7CmludCBiaXRbMjAwMDAwXTsKc3RydWN0IG5vZGV7CglpbnQga2MsIHUsIGhrOwoJYm9vbCBvcGVyYXRvcjwoY29uc3Qgbm9kZSYgb3RoZXIpIGNvbnN0IHsKICAgICAgICByZXR1cm4ga2MgPiBvdGhlci5rYzsgCiAgICB9Cn07CnN0cnVjdCBlZGdlewoJaW50IHUsIHYsIHcsIGlkOwoJZnJpZW5kIGJvb2wgb3BlcmF0b3IgPCAoIGVkZ2UgYSwgZWRnZSBiKXsKCQlyZXR1cm4gYS53ID4gYi53OwoJfQp9OwpzdHJpbmcgczsKaW50IGFbTl07CnZvaWQgbmhhcCgpewogICAgY2luID4+IHM7CiAgICAKfQp2b2lkIHNvbHZlKCl7CiAgICBmb3IoaW50IGkgPSAxOyBpIDwgcy5zaXplKCk7IGkrKyl7CiAgICAgICAgaW50IGogPSBhW2kgLSAxXTsKICAgICAgICB3aGlsZShqID4gMCAmJiBzW2ldICE9IHNbal0pewogICAgICAgICAgICBqID0gYVtqIC0gMV07CiAgICAgICAgfQogICAgICAgIGlmKHNbaV0gPT0gc1tqXSl7CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgYVtpXSA9IGo7CiAgICB9CiAgICBpbnQgc3ogPSBzLnNpemUoKSAtIGFbcy5zaXplKCkgLSAxXTsKICAgIGludCBrID0gMTsKICAgIHN0cmluZyB0ID0gczsKICAgIGlmKHMuc2l6ZSgpICUgc3ogPT0gMCl7CiAgICAgICAgayA9IHMuc2l6ZSgpIC8gc3o7CiAgICAgICAgdCA9IHMuc3Vic3RyKDAsIHN6KTsKICAgIH0KCiAgICBjb3V0IDw8IGsgPDwgdCA8PCBubjsKfQpzaWduZWQgbWFpbigpIHsKCS8vIGZyZW9wZW4oInBpZ2d5YmFjay5pbiIsICJyIiwgc3RkaW4pOwoJLy8gZnJlb3BlbigicGlnZ3liYWNrLm91dCIsICJ3Iiwgc3Rkb3V0KTsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CgljaW4udGllKDApOwoJY291dC50aWUoMCk7CiAgICBuaGFwKCk7CiAgICBzb2x2ZSgpOwoJcmV0dXJuIDA7Cgp9Cg==