HDU 5510
#include <stdio.h>
#include
#include <string.h>
#include
const int maxn=1e4+5;
using namespace std;
int num[maxn];
string str[maxn];
void get_next(string s)
{
memset(num,0,sizeof(num));
int len=s.length();
int i,j;
j=num[0]=-1;
i=0;
while(i<len)
{
while(j!=-1&&s[i]!=s[j])
j=num[j];
num[++i]=++j;
}
}
bool kmp(string a,string b)
{
int lena=a.length();
int lenb=b.length();
get_next(b);
int i=0,j=0;
while(i<lena)
{
while(j!=-1&&a[i]!=b[j])
j=num[j];
i++,j++;
if(j>=lenb)
return true;
}
return false;
}
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
int cnt=0;
while(t--)
{
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>str[i];
}
int j=1;
int ans=-1;
for(int i=2; i<=n; i++)
{
while(j<i&&kmp(str[i],str[j]))
{
j++;
}
if(j<i)
ans=i;
}
cout<<"Case #"<<++cnt<<": "<<ans<<endl;
}
}