#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
const int N = 200, P = 13331;
ULL p[N], h[N];
ULL get(int l, int r){
return h[r] - h[l-1] * p[r-l+1];
}
int main(){
string str1;
cin >> str1;
string str2 = " ";
string str = str2 + str1;
int n = str.size()-1;
map<string, int> mp;
h[0] = 0;
p[0] = 1;
for (int i=1; i<=n; i++){
p[i] = p[i-1] * P;
h[i] = h[i-1] * P + str[i];
}
for (int i=1; i<=n; i++){
for (int j=0; j<=n-i+1; j++){
mp[str.substr(i,j)]++;
}
}
for (auto item : mp){
if (item.second > 1 && item.first != "\0"){
cout << item.first << " " << item.second << endl;
}
}
return 0;
}