#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.