Browser Games
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int n,m,a[N],ans[N];
string s[N];
bool cmp(int a,int b){
return s[a]<s[b];
}
void dfs(int l,int r,int x,int k)
{
if(l==r)return;
int ma=0;
for(int i=l,j=l;i<=r;i++)
{
ma=max(ma,a[i]);
if(i==r||s[a[i]][k]!=s[a[i+1]][k])
{
ans[ma]++;
ans[x]--;
dfs(j,i,ma,k+1);
j=i+1;
ma=0;
}
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i],a[i]=i;
if(n==1){
printf("1\n");
return 0;
}
sort(a+1,a+n+1,cmp);
dfs(1,n,n+1,0);
for(int i=1;i<=n;i++)
ans[i]+=ans[i-1],printf("%d\n",ans[i]);
}