Pagini recente » Cod sursa (job #610209) | Cod sursa (job #2061994) | infoarena - comunitate informatica, concursuri de programare | Cod sursa (job #343103) | Cod sursa (job #1679999)
#include <fstream>
#include <string>
using namespace std;
const int MaxLng = 1000005;
ifstream cin("prefix.in");
ofstream cout("prefix.out");
int pref[MaxLng];
int T;
void PiInit(const string &str, const int &sz) {
int k = 0;
for(int i = 2; i <= sz; ++i) {
while(k and str[k + 1] != str[i]) {
k = pref[k];
}
if(str[k + 1] == str[i]) {
++k;
}
pref[i] = k;
}
}
int main() {
cin >> T;
for(int i = 1; i <= T; ++i) {
string str_read, str;
cin >> str_read;
str.push_back('0');
str += str_read;
int sz = (int) str.size() - 1;
PiInit(str, sz);
bool printed = false;
for(int i = sz; i >= 1; --i) {
if(pref[i] and i % (i - pref[i]) == 0) {
cout << i << '\n';
printed = true;
break;
}
}
if(!printed) {
cout << "0\n";
}
}
return 0;
}