#include<bits/stdc++.h>
using namespace std;
#define int long long
#define tc int t; cin>>t; while(t--)
#define speed ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define mod 1000000007;
#define pb push_back
#define vi vector<int>
#define vc vector<char>
#define eb emplace_back
#define pii pair<int,int>
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define fo(i,x,n) for(int i=x;i<n;i++)
const int inf=0x3f3f3f3f3f3f3f3f;
#define btoi(str,i) stoi(str,0,i)
#define ff first
#define ss second
#define tz(x) __builtin_ctz(x)
#define csb(x) __builtin_popcount(x)
int dp[30][30];
int vis[26];
int32_t main(){
string s;cin>>s;
int n=s.size();
vi v(30,0);
for(int i=0;i<n;i++){
v[s[i]-'a']+=1;
vis[s[i]-'a']=1;
for(int j=0;j<26;j++){
if(j==s[i]-'a')continue;
if(vis[j]){
dp[s[i]-'a'][j]+=v[s[i]-'a'];
}
}
}
int sss=0;
for(int i=0;i<26;i++){
for(int j=0;j<26;j++){
cout<<dp[i][j]<<" ";
sss=max(sss,dp[i][j]);
}cout<<endl;
}
cout<<sss<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgdGMgaW50IHQ7IGNpbj4+dDsgd2hpbGUodC0tKQojZGVmaW5lIHNwZWVkIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCksIGNvdXQudGllKDApCiNkZWZpbmUgbW9kIDEwMDAwMDAwMDc7CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSB2YyB2ZWN0b3I8Y2hhcj4KI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBwaWkgcGFpcjxpbnQsaW50PgojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCkseC5lbmQoKQojZGVmaW5lIHJhbGwoeCkgeC5yYmVnaW4oKSx4LnJlbmQoKQojZGVmaW5lIGZvKGkseCxuKSBmb3IoaW50IGk9eDtpPG47aSsrKQpjb25zdCBpbnQgaW5mPTB4M2YzZjNmM2YzZjNmM2YzZjsKI2RlZmluZSBidG9pKHN0cixpKSBzdG9pKHN0ciwwLGkpCiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSB0eih4KSBfX2J1aWx0aW5fY3R6KHgpCiNkZWZpbmUgY3NiKHgpIF9fYnVpbHRpbl9wb3Bjb3VudCh4KQoKaW50IGRwWzMwXVszMF07CmludCB2aXNbMjZdOwppbnQzMl90IG1haW4oKXsKc3RyaW5nIHM7Y2luPj5zOwppbnQgbj1zLnNpemUoKTsKdmkgdigzMCwwKTsKZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICB2W3NbaV0tJ2EnXSs9MTsKICAgIHZpc1tzW2ldLSdhJ109MTsKICAgIGZvcihpbnQgaj0wO2o8MjY7aisrKXsKICAgICAgaWYoaj09c1tpXS0nYScpY29udGludWU7CiAgICAgIGlmKHZpc1tqXSl7CiAgICAgIGRwW3NbaV0tJ2EnXVtqXSs9dltzW2ldLSdhJ107CiAgICB9CiAgICAJCiAgICB9Cn0KaW50IHNzcz0wOwpmb3IoaW50IGk9MDtpPDI2O2krKyl7CiAgZm9yKGludCBqPTA7ajwyNjtqKyspewogIAljb3V0PDxkcFtpXVtqXTw8IiAiOwogICAgICBzc3M9bWF4KHNzcyxkcFtpXVtqXSk7CiAgfWNvdXQ8PGVuZGw7Cn0KY291dDw8c3NzPDxlbmRsOwp9