#include<bits/stdc++.h>
using namespace std;
typedef int ll;
const ll mx=200001;
ll sa[mx],lcp[mx],pos[mx],tmp[mx];
string a;
ll d=1,n;
bool cmp(ll x,ll y){
if(pos[x]!=pos[y]) return pos[x]<pos[y];
x+=d;y+=d;
return x<n&&y<n?pos[x]<pos[y]:x>y;
}
void findSA(){
for(ll i=0;i<n;++i){
sa[i]=i;
pos[i]=a[i];
}
for(d=1;;d<<=1){
sort(sa,sa+n,cmp);
tmp[0]=0;
for(ll i=1;i<n;++i) tmp[i]=tmp[i-1]+cmp(sa[i-1],sa[i]);
for(ll i=0;i<n;++i) pos[sa[i]]=tmp[i];
for(int i =0;i<n;++i){
cout<<tmp[i]<<" "<<a.substr(sa[i])<<endl;
}
cout<<a<<endl;
for(int i =0;i<n;++i) cout<<pos[i];cout<<endl;
for(int i =0;i<n;++i) cout<<sa[i];cout<<endl;
if(/*tmp[n-1]==n-1 ||*/ d>=n) break;
}
}
int main() {
a = "BANANANA";
n = a.size();
cout<<a<<endl;
findSA();
// your code goes here
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBpbnQgbGw7CmNvbnN0IGxsIG14PTIwMDAwMTsKbGwgc2FbbXhdLGxjcFtteF0scG9zW214XSx0bXBbbXhdOwpzdHJpbmcgYTsKbGwgZD0xLG47CmJvb2wgY21wKGxsIHgsbGwgeSl7CiAgICBpZihwb3NbeF0hPXBvc1t5XSkgcmV0dXJuIHBvc1t4XTxwb3NbeV07CiAgICB4Kz1kO3krPWQ7CiAgICByZXR1cm4geDxuJiZ5PG4/cG9zW3hdPHBvc1t5XTp4Pnk7Cn0Kdm9pZCBmaW5kU0EoKXsKICAgIGZvcihsbCBpPTA7aTxuOysraSl7CiAgICAgICAgc2FbaV09aTsKICAgICAgICBwb3NbaV09YVtpXTsKICAgIH0KICAgIGZvcihkPTE7O2Q8PD0xKXsKICAgIAlzb3J0KHNhLHNhK24sY21wKTsKICAgICAgICB0bXBbMF09MDsKICAgICAgICBmb3IobGwgaT0xO2k8bjsrK2kpIHRtcFtpXT10bXBbaS0xXStjbXAoc2FbaS0xXSxzYVtpXSk7CiAgICAgICAgZm9yKGxsIGk9MDtpPG47KytpKSBwb3Nbc2FbaV1dPXRtcFtpXTsKICAgICAgICAKICAgICAgICBmb3IoaW50IGkgPTA7aTxuOysraSl7CiAgICAgICAgCWNvdXQ8PHRtcFtpXTw8IiAiPDxhLnN1YnN0cihzYVtpXSk8PGVuZGw7CiAgICAgICAgfQogICAgICAgIGNvdXQ8PGE8PGVuZGw7CiAgICAgICAgZm9yKGludCBpID0wO2k8bjsrK2kpIGNvdXQ8PHBvc1tpXTtjb3V0PDxlbmRsOwogICAgICAgIGZvcihpbnQgaSA9MDtpPG47KytpKSBjb3V0PDxzYVtpXTtjb3V0PDxlbmRsOwogICAgICAgIGlmKC8qdG1wW24tMV09PW4tMSB8fCovIGQ+PW4pIGJyZWFrOwogICAgfQp9CmludCBtYWluKCkgewoJYSA9ICJCQU5BTkFOQSI7CgluID0gYS5zaXplKCk7Cgljb3V0PDxhPDxlbmRsOwoJZmluZFNBKCk7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglyZXR1cm4gMDsKfQ==