简单KMP
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
char s[1000005];
int next[1000005],flag,len;
bool hash[1000005];
void getnext(){
int k=1,j=0;
next[k]=0;
while(k<=len+1){
if(j==0||s[k]==s[j]){
++j,++k;
next[k]=j;
}
else
j=next[j];
}
}
int main(){
int i;
scanf("%s",&s[1]);
len=strlen(&s[1]);
memset(hash,0,sizeof(hash));
getnext();
for(i=1;i<=len;i++)
hash[next[i]-1]=1;
int tmp=next[len+1]-1;
flag=-1;
while(tmp!=0){
if(hash[tmp]){
flag=tmp;
break;
}
tmp=next[tmp+1]-1;
}
if(tmp==0)
printf("Just a legend");
else
for(i=1;i<=tmp;i++)
printf("%c",s[i]);
printf("\n");
return 0;
}