#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[2] = {(int)1e9 + 2277, (int)1e9 + 9277};
const int N = 1e5 + 5;
int n;
string s;
int p_pow[2][N], h[2][N];
void precompute() {
for (int i = 0; i <= 1; i++) {
p_pow[i][0] = 1;
for (int j = 1; j <= n; j++) p_pow[i][j] = 1ll * p_pow[i][j - 1] * p % MOD[i];
}
for (int i = 0; i <= 1; i++) {
h[i][0] = 0;
for (int j = 1; j <= n; j++) h[i][j] = (1ll * h[i][j - 1] * p + (s[j] - 'a' + 1)) % MOD[i];
}
}
ii getHash(int l, int r) {
ii ans;
ans.first = (h[0][r] - 1ll * h[0][l - 1] * p_pow[0][r - l + 1] % MOD[0] + MOD[0]) % MOD[0];
ans.second = (h[1][r] - 1ll * h[1][l - 1] * p_pow[1][r - l + 1] % MOD[1] + MOD[1]) % MOD[1];
return ans;
}
// Trả về chỉ số bắt đầu của xâu con có độ dài len xuất hiện ít nhất 2 lần trong xâu s
// Nếu không tồn tại xâu con nào thì trả về -1
int check(int len) {
vector<pair<ii, int>> hs;
for (int i = 1; i + len - 1 <= n; i++) {
ii cur_h = getHash(i, i + len - 1);
hs.push_back(make_pair(cur_h, i));
}
sort(hs.begin(), hs.end());
for (int i = 1; i < hs.size(); i++) {
if (hs[i].first == hs[i - 1].first) return hs[i].second;
}
return -1;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> s;
n = s.size();
s = ' ' + s;
precompute();
int l = 1, r = n; ii ans = {-1, -1};
while (l <= r) {
int mid = (l + r) >> 1;
int pos = check(mid);
if (pos != -1) {
ans = {mid, pos};
l = mid + 1;
}
else {
r = mid - 1;
}
}
if (ans.first == -1) {
cout << -1 << '\n';
}
else {
cout << s.substr(ans.second, ans.first) << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IHAgPSAzMTsgCmNvbnN0IGludCBNT0RbMl0gPSB7KGludCkxZTkgKyAyMjc3LCAoaW50KTFlOSArIDkyNzd9OyAKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCmludCBuOyAKc3RyaW5nIHM7ICAKaW50IHBfcG93WzJdW05dLCBoWzJdW05dOyAKCnZvaWQgcHJlY29tcHV0ZSgpIHsKCWZvciAoaW50IGkgPSAwOyBpIDw9IDE7IGkrKykgewoJCXBfcG93W2ldWzBdID0gMTsgIAoJCWZvciAoaW50IGogPSAxOyBqIDw9IG47IGorKykgcF9wb3dbaV1bal0gPSAxbGwgKiBwX3Bvd1tpXVtqIC0gMV0gKiBwICUgTU9EW2ldOyAgCgl9CgoJZm9yIChpbnQgaSA9IDA7IGkgPD0gMTsgaSsrKSB7CgkJaFtpXVswXSA9IDA7ICAKCQlmb3IgKGludCBqID0gMTsgaiA8PSBuOyBqKyspIGhbaV1bal0gPSAoMWxsICogaFtpXVtqIC0gMV0gKiBwICsgKHNbal0gLSAnYScgKyAxKSkgJSBNT0RbaV07IAoJfQp9CgppaSBnZXRIYXNoKGludCBsLCBpbnQgcikgewoJaWkgYW5zOyAKCWFucy5maXJzdCA9IChoWzBdW3JdIC0gMWxsICogaFswXVtsIC0gMV0gKiBwX3Bvd1swXVtyIC0gbCArIDFdICUgTU9EWzBdICsgTU9EWzBdKSAlIE1PRFswXTsgCglhbnMuc2Vjb25kID0gKGhbMV1bcl0gLSAxbGwgKiBoWzFdW2wgLSAxXSAqIHBfcG93WzFdW3IgLSBsICsgMV0gJSBNT0RbMV0gKyBNT0RbMV0pICUgTU9EWzFdOyAKCXJldHVybiBhbnM7IAp9CgovLyBUcuG6oyB24buBIGNo4buJIHPhu5EgYuG6r3QgxJHhuqd1IGPhu6dhIHjDonUgY29uIGPDsyDEkeG7mSBkw6BpIGxlbiB4deG6pXQgaGnhu4duIMOtdCBuaOG6pXQgMiBs4bqnbiB0cm9uZyB4w6J1IHMKLy8gTuG6v3Uga2jDtG5nIHThu5NuIHThuqFpIHjDonUgY29uIG7DoG8gdGjDrCB0cuG6oyB24buBIC0xCmludCBjaGVjayhpbnQgbGVuKSB7Cgl2ZWN0b3I8cGFpcjxpaSwgaW50Pj4gaHM7ICAKCWZvciAoaW50IGkgPSAxOyBpICsgbGVuIC0gMSA8PSBuOyBpKyspIHsKCQlpaSBjdXJfaCA9IGdldEhhc2goaSwgaSArIGxlbiAtIDEpOyAgCgkJaHMucHVzaF9iYWNrKG1ha2VfcGFpcihjdXJfaCwgaSkpOyAKCX0KCglzb3J0KGhzLmJlZ2luKCksIGhzLmVuZCgpKTsgICAKCglmb3IgKGludCBpID0gMTsgaSA8IGhzLnNpemUoKTsgaSsrKSB7CgkJaWYgKGhzW2ldLmZpcnN0ID09IGhzW2kgLSAxXS5maXJzdCkgcmV0dXJuIGhzW2ldLnNlY29uZDsgCgl9CgoJcmV0dXJuIC0xOyAKfQoKaW50IG1haW4oKSB7Cglpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IAoJY2luLnRpZShudWxscHRyKTsgCQoJY2luID4+IHM7IAoJbiA9IHMuc2l6ZSgpOyAKCXMgPSAnICcgKyBzOyAgCgoJcHJlY29tcHV0ZSgpOyAgCgoJaW50IGwgPSAxLCByID0gbjsgaWkgYW5zID0gey0xLCAtMX07IAoKCXdoaWxlIChsIDw9IHIpIHsKCQlpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAKCQlpbnQgcG9zID0gY2hlY2sobWlkKTsgCgoJCWlmIChwb3MgIT0gLTEpIHsKCQkJYW5zID0ge21pZCwgcG9zfTsgIAoJCQlsID0gbWlkICsgMTsgCgkJfQoJCWVsc2UgewoJCQlyID0gbWlkIC0gMTsgCgkJfQoJfQoKCWlmIChhbnMuZmlyc3QgPT0gLTEpIHsKCQljb3V0IDw8IC0xIDw8ICdcbic7IAoJfQoJZWxzZSB7CgkJY291dCA8PCBzLnN1YnN0cihhbnMuc2Vjb25kLCBhbnMuZmlyc3QpIDw8ICdcbic7IAoJfQp9