fork download
#include <bits/stdc++.h>
#include <sstream>
#define ll long long
#define fr(i,j,p) for(int i=j; i<p ;i++)
#include <stdio.h>
# define M_PI           3.14159265358979323846

//memset(b,0,sizeof(b[0][0])*100001*5);
//std::cout << std::fixed << std::setprecision(7) << m;
//tuple
//int s1=0,l=0;
//ll md=1000000007;
//ll dp[100005];
//set<ll> st1;    set<ll> st2;
//int b[100005][32];
int dp[27][100005];

using namespace std;
vector<int>v[27];
//vector<int>c;



int main()
{
    //freopen("input.txt","r",stdin);
    //freopen("output.txt","w",stdout);
    ios::sync_with_stdio(0);
    string s;   cin>>s;
    memset(dp,0,sizeof(dp[0][0])*27*100005);
    int l=s.length();
    fr(i,0,27)  {v[i].push_back(l);}
    for(int i=l-1;i>=0;i--)
    {
        fr(j,0,26)  {dp[(s[i]-'a')][i]=dp[(s[i]-'a')][i+1];}
        dp[(s[i]-'a')][i]=dp[(s[i]-'a')][i+1]+1;
    }
    int mx=0;
    fr(i,0,26)  mx=max(mx,dp[i][0]);
    fr(i,0,26)
    {
        fr(j,0,26)
        {
            if(i==j)    continue;
            int x=0;
            fr(k,0,s.length())
            {
            	if(dp[i][k]==0 && dp[i][k]==dp[i][k+1])	continue;
                x=x+dp[j][k];
            }
            mx=max(mx,x);
        }
    }
    cout<<mx<<endl;
    fr(i,0,26)
    {fr(j,0,l)	{cout<<dp[i][j]<<" ";}	cout<<endl;}
    return 0;
}

/*int n,m,k;
    cin>>n>>m>>k;
    int aa=k;
    int d[n];
    fr(i,0,n)
    {
        cin>>a[i]>>b[i]>>c[i];
        d[i]=aa-a[i];
        if(d[i]<0)  {cout<<-1; break;}
        aa=aa+b[i];
    }
    int mn[n];
    mn[n-1]=d[n-1];
    for(int i=n-2;i>=0,i--)
    {
        if(d[i]<mn[i+1])    {mn[i]=d[i];}
        else mn[i]=mn[i+1];
    }
    pair<int,int>p[m];
    fr(i,0,m)   {cin>>p[i].first>>p[i].second;}
    sort(p,p+m);*/


    /*int n,c=0;
    double sum=0.000;
    cin>>n;
    double a[2*n];
    fr(i,0,2*n)
    {
        cin>>a[i];
        int x=a[i];
        double y=a[i]-x;
        if(y==0)    c++;
        sum=sum+y;
    }
    c=c/2;
    cout<<c<<endl;
    sum=sum-(n-c);
    cout<<sum<<endl;
    if(sum<0)   {sum=-sum;}
    if(sum>0.5 &&c>sum)  {sum=ceil(sum)-sum;}
    else if(sum>0.5 &&c<sum)    {sum=sum-c;}
    cout<<fixed<<setprecision(3)<<sum;*/
Success #stdin #stdout 0s 14160KB
stdin
aaaa
stdout
4
4 3 2 1 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0 
0 0 0 0