#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
const int mod=1e9+7;
#define pb push_back
#define all(x) (x).begin(),(x).end()
typedef long long ll;
typedef vector<int> vi;
ll qpow(ll a,ll b){ll ans=1;a%=mod;assert(b>=0);for(;b;b>>=1){if(b&1)ans=ans*a%mod;a=a*a%mod;}return ans;}
ll gcd(ll a,ll b){return b>0?gcd(b,a%b):a;}
int vis[maxn];
struct SAM{
int nxt[maxn<<1][15];
int link[maxn<<1];
int step[maxn<<1];
int sum[maxn<<1];
int last,sz,rt;
void init(){
rt=sz=last=1;
}
void add(int c){
int p=last,np=++sz;
last=np;
step[np]=step[p]+1;
while(!nxt[p][c]&&p){
nxt[p][c]=np;
p=link[p];
}
if(p==0){
link[np]=rt;
}else{
int q=nxt[p][c];
if(step[p]+1==step[q]){
link[np]=q;
}else{
int nq=++sz;
memcpy(nxt[nq],nxt[q],sizeof nxt[q]);
link[nq]=link[q];
link[np]=link[q]=nq;
step[nq]=step[p]+1;
while(nxt[p][c]==q&&p){
nxt[p][c]=nq;
p=link[p];
}
}
}
}
}sam;
int main(){
int n,m,T;
cin>>n;
string s;
sam.init();
return 0;
}
Q.E.D.