#include"stdio.h"
#include"math.h"
#include"iostream"
//#include"assert.h"
using namespace std;
//#include"conio.h"
//#include"io.h"
#define FAIL -1
#define Init 0
#define N 10101000
#define M 1010
#define ML 11111
#define AS 128
#define INF (int)((unsigned int)(-1)>>2)
#define _max(a,b) (a>b?a:b)
#define _min(a,b) (a
long lrs[N]={0};
long bk[N]={0};
long belong[N]={0};
int cac[ML][M]={0};
int trans[AS][ML];
long m,n,ml0;
char p[N];
inline int LengthCommonSuffix(int p1, int p2)
{
if (p2 == bk[p1]) return lrs[p1];
while (bk[p1] != bk[p2])
p2 = bk[p2];
return _min(lrs[p1], lrs[p2]);
}
inline int LengthRepeatedSuffix(int p1, int s)
{
if (s == Init) return 0;
return LengthCommonSuffix(p1, s - 1) + 1;
}
void Oracle_on_line(char *p, int n)
{
void Analy(int,int,int);
int k, s, j, u;
char c;
for(j = 0; j < AS;j++)
for(k = 0;k < ML;k++)
trans[j][k]=FAIL;
memset(cac, 0, sizeof cac);
memset(lrs, 0, sizeof lrs);
memset( bk, 0, sizeof bk);
bk[Init] = FAIL;
for (j = 0; j
c = p[j];
if(belong[j]==0)
trans[c][j] = j + 1;
u = j;
k = bk[j];
//assert(k
while (k > FAIL && trans[c][k] == FAIL)
{
if(belong[j]==0)
trans[c][k] = j + 1;
u = k;
k = bk[k];
}