12 vector<
int> p(n), c(n), cnt(max(n,C),0);
18 for(
int i=0; i<n; i++) cnt[s[i]]++;
19 for(
int i=1; i<cnt.size(); i++) cnt[i]+=cnt[i-1];
21 for(
int i=0; i<n; i++) p[--cnt[s[i]]]=i;
24 for(
int i=1; i<n; i++) {
26 if(s[p[i]]!=s[p[i-1]]) c[p[i]]++;
29 vector<
int> np(n),nc(n);
30 for(
int k=0; (1<<k)<n; k++) {
33 for(
int i=0; i<n; i++) np[i]=p[i]-(1<<k),(np[i]+=n)%=n;
34 fill(cnt.begin(),cnt.end(),0);
35 for(
int i=0; i<n; i++) cnt[c[np[i]]]++;
36 for(
int i=1; i<cnt.size(); i++) cnt[i]+=cnt[i-1];
37 for(ll i=n-1; i>=0; i--) p[--cnt[c[np[i]]]]=np[i];
40 for(
int i=1; i<n; i++) {
42 if(c[p[i]]!=c[p[i-1]] || c[(p[i]+(1<<k))%n]!=c[(p[i-1]+(1<<k))%n]) nc[p[i]]++;