Pagini recente » Cod sursa (job #2386501) | Cod sursa (job #1863759) | Cod sursa (job #1473807) | Cod sursa (job #2120222) | Cod sursa (job #1400219)
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
using namespace std;
#define MAXN 1000003
vector <int> overlap(MAXN);
ifstream f("prefix.in");
ofstream g("prefix.out");
#define cout g
#define cin f
void fillOverlap(string w)
{
int k=0;
for (int i=2; i<=w.length(); ++i)
{
while (k>0 && w[k]!=w[i-1])
k=overlap[k];
if (w[k]==w[i-1])
++k;
overlap[i]=k;
}
}
void getRes(string w)
{
bool found = false;
for(int i = w.length(); i >= 1; --i)
{
if(overlap[i] && !(i % (i - overlap[i])))
{
cout << i << "\n";
found = true;
break;
}
}
if(!found) cout << "0\n";
}
int main()
{
int t;
string s;
cin >> t;
for(;t;--t)
{
cin >> s;
overlap.clear();
overlap.resize(MAXN, 0);
fillOverlap(s);
getRes(s);
}
return 0;
}