#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<ll, ll>
#define fi first
#define se second
using namespace std;
const int maxn = 1e5;
const int MOD = 1e9 + 7;
const int BASE = 256;
int n, mx_cnt = 0, mx_len;
string s;
ll h[maxn + 10], p[maxn + 10];
unordered_map<ll, int> mp;
ii mx = {0, 0};
ll get_hash(int l, int r)
{
ll a = h[r] - h[l - 1] * p[r - l + 1] % MOD;
a %= MOD;
a += MOD;
return a % MOD;
}
bool check(int x)
{
mp.clear();
int mx = 0;
for (int i = 1; i <= n - x + 1; i++)
{
mp[get_hash(i, i + x - 1)]++;
mx = max(mx, mp[get_hash(i, i + x - 1)]);
}
return mx >= mx_cnt;
}
int bs(int l, int r)
{
int ans = l;
while (l <= r)
{
int m = l + r >> 1;
if (check(m))
{
ans = m;
l = m + 1;
}
else
r = m - 1;
}
return ans;
}
bool cmp(int i, int j)
{
int l = 1;
int r = mx_len;
int ans = 0;
while (l <= r)
{
int m = l + r >> 1;
if (get_hash(i, i + m - 1) == get_hash(j, j + m - 1))
{
ans = m;
l = m + 1;
}
else
r = m - 1;
}
if (ans == mx_len)
return 0;
return s[i + ans] < s[j + ans];
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("COUNTSTR.INP", "r"))
{
freopen("COUNTSTR.INP", "r", stdin);
freopen("COUNTSTR.OUT", "w", stdout);
}
cin >> s;
n = s.size();
s = ' ' + s;
p[0] = 1;
for (int i = 1; i <= n; i++)
{
p[i] = p[i - 1] * BASE % MOD;
h[i] = (h[i - 1] * BASE + s[i]) % MOD;
}
for (int i = 2; i <= n; i++)
{
ll hsh = get_hash(i - 1, i);
mp[hsh]++;
mx_cnt = max(mx_cnt, mp[hsh]);
}
cout << mx_cnt, el;
if (mx_cnt == 0)
return 0;
mx_len = bs(1, n);
mp.clear();
for (int i = 1; i <= n - mx_len + 1; i++)
{
// cout << mx.fi << ' ' << mx.se, el;
// for (int j = mx.se; j <= mx.se + mx_len - 1; j++)
// cout << s[j];
// el;
mp[get_hash(i, i + mx_len - 1)]++;
int x = mp[get_hash(i, i + mx_len - 1)];
if (mx.fi < x)
mx = {x, i};
else if (mx.fi == x && cmp(i, mx.se))
mx.se = i;
// cout << mx.fi << ' ' << mx.se, el;
// for (int j = mx.se; j <= mx.se + mx_len - 1; j++)
// cout << s[j];
// el;
// el;
}
// mx_len = 2;
// string t = "";
// t += s[43];
// t += s[44];
// cout << t, el;
// t = "";
// t += s[22];
// t += s[23];
// cout << t, el;
// cout << cmp(204, 449), el;
for (int i = mx.se; i <= mx_len + mx.se - 1; i++)
cout << s[i];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8bGwsIGxsPgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IG1heG4gPSAxZTU7CmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBpbnQgQkFTRSA9IDI1NjsKCmludCBuLCBteF9jbnQgPSAwLCBteF9sZW47CnN0cmluZyBzOwpsbCBoW21heG4gKyAxMF0sIHBbbWF4biArIDEwXTsKdW5vcmRlcmVkX21hcDxsbCwgaW50PiBtcDsKaWkgbXggPSB7MCwgMH07CgpsbCBnZXRfaGFzaChpbnQgbCwgaW50IHIpCnsKICAgIGxsIGEgPSBoW3JdIC0gaFtsIC0gMV0gKiBwW3IgLSBsICsgMV0gJSBNT0Q7CiAgICBhICU9IE1PRDsKICAgIGEgKz0gTU9EOwogICAgcmV0dXJuIGEgJSBNT0Q7Cn0KYm9vbCBjaGVjayhpbnQgeCkKewogICAgbXAuY2xlYXIoKTsKICAgIGludCBteCA9IDA7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuIC0geCArIDE7IGkrKykKICAgIHsKICAgICAgICBtcFtnZXRfaGFzaChpLCBpICsgeCAtIDEpXSsrOwogICAgICAgIG14ID0gbWF4KG14LCBtcFtnZXRfaGFzaChpLCBpICsgeCAtIDEpXSk7CiAgICB9CiAgICByZXR1cm4gbXggPj0gbXhfY250Owp9CmludCBicyhpbnQgbCwgaW50IHIpCnsKICAgIGludCBhbnMgPSBsOwogICAgd2hpbGUgKGwgPD0gcikKICAgIHsKICAgICAgICBpbnQgbSA9IGwgKyByID4+IDE7CiAgICAgICAgaWYgKGNoZWNrKG0pKQogICAgICAgIHsKICAgICAgICAgICAgYW5zID0gbTsKICAgICAgICAgICAgbCA9IG0gKyAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICAgIHIgPSBtIC0gMTsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KYm9vbCBjbXAoaW50IGksIGludCBqKQp7CiAgICBpbnQgbCA9IDE7CiAgICBpbnQgciA9IG14X2xlbjsKICAgIGludCBhbnMgPSAwOwogICAgd2hpbGUgKGwgPD0gcikKICAgIHsKICAgICAgICBpbnQgbSA9IGwgKyByID4+IDE7CiAgICAgICAgaWYgKGdldF9oYXNoKGksIGkgKyBtIC0gMSkgPT0gZ2V0X2hhc2goaiwgaiArIG0gLSAxKSkKICAgICAgICB7CiAgICAgICAgICAgIGFucyA9IG07CiAgICAgICAgICAgIGwgPSBtICsgMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICByID0gbSAtIDE7CiAgICB9CiAgICBpZiAoYW5zID09IG14X2xlbikKICAgICAgICByZXR1cm4gMDsKICAgIHJldHVybiBzW2kgKyBhbnNdIDwgc1tqICsgYW5zXTsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbigiQ09VTlRTVFIuSU5QIiwgInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKCJDT1VOVFNUUi5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJDT1VOVFNUUi5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IHM7CiAgICBuID0gcy5zaXplKCk7CiAgICBzID0gJyAnICsgczsKICAgIHBbMF0gPSAxOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgewogICAgICAgIHBbaV0gPSBwW2kgLSAxXSAqIEJBU0UgJSBNT0Q7CiAgICAgICAgaFtpXSA9IChoW2kgLSAxXSAqIEJBU0UgKyBzW2ldKSAlIE1PRDsKICAgIH0KICAgIGZvciAoaW50IGkgPSAyOyBpIDw9IG47IGkrKykKICAgIHsKICAgICAgICBsbCBoc2ggPSBnZXRfaGFzaChpIC0gMSwgaSk7CiAgICAgICAgbXBbaHNoXSsrOwogICAgICAgIG14X2NudCA9IG1heChteF9jbnQsIG1wW2hzaF0pOwogICAgfQogICAgY291dCA8PCBteF9jbnQsIGVsOwogICAgaWYgKG14X2NudCA9PSAwKQogICAgICAgIHJldHVybiAwOwogICAgbXhfbGVuID0gYnMoMSwgbik7CiAgICBtcC5jbGVhcigpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbiAtIG14X2xlbiArIDE7IGkrKykKICAgIHsKLy8gICAgICAgIGNvdXQgPDwgbXguZmkgPDwgJyAnIDw8IG14LnNlLCBlbDsKLy8gICAgICAgIGZvciAoaW50IGogPSBteC5zZTsgaiA8PSBteC5zZSArIG14X2xlbiAtIDE7IGorKykKLy8gICAgICAgICAgICBjb3V0IDw8IHNbal07Ci8vICAgICAgICBlbDsKICAgICAgICBtcFtnZXRfaGFzaChpLCBpICsgbXhfbGVuIC0gMSldKys7CiAgICAgICAgaW50IHggPSBtcFtnZXRfaGFzaChpLCBpICsgbXhfbGVuIC0gMSldOwogICAgICAgIGlmIChteC5maSA8IHgpCiAgICAgICAgICAgIG14ID0ge3gsIGl9OwogICAgICAgIGVsc2UgaWYgKG14LmZpID09IHggJiYgY21wKGksIG14LnNlKSkKICAgICAgICAgICAgbXguc2UgPSBpOwovLyAgICAgICAgY291dCA8PCBteC5maSA8PCAnICcgPDwgbXguc2UsIGVsOwovLyAgICAgICAgZm9yIChpbnQgaiA9IG14LnNlOyBqIDw9IG14LnNlICsgbXhfbGVuIC0gMTsgaisrKQovLyAgICAgICAgICAgIGNvdXQgPDwgc1tqXTsKLy8gICAgICAgIGVsOwovLyAgICAgICAgZWw7CiAgICB9Ci8vICAgIG14X2xlbiA9IDI7Ci8vICAgIHN0cmluZyB0ID0gIiI7Ci8vICAgIHQgKz0gc1s0M107Ci8vICAgIHQgKz0gc1s0NF07Ci8vICAgIGNvdXQgPDwgdCwgZWw7Ci8vICAgIHQgPSAiIjsKLy8gICAgdCArPSBzWzIyXTsKLy8gICAgdCArPSBzWzIzXTsKLy8gICAgY291dCA8PCB0LCBlbDsKLy8gICAgY291dCA8PCBjbXAoMjA0LCA0NDkpLCBlbDsKICAgIGZvciAoaW50IGkgPSBteC5zZTsgaSA8PSBteF9sZW4gKyBteC5zZSAtIDE7IGkrKykKICAgICAgICBjb3V0IDw8IHNbaV07Cn0K