Pagini recente » Cod sursa (job #2613222) | Cod sursa (job #2700392) | Cod sursa (job #2430977) | Cod sursa (job #710159) | Cod sursa (job #1155430)
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
ifstream fin ("prefix.in");
ofstream fout ("prefix.out");
const int N = 1e6 + 5;
string s;
int n, U[N];
int main() {
fin >> n;
while (n--) {
int sol = 0;
string Input;
fin >> Input;
s = ' ' + Input;
int k = 0;
for (int i = 2; i < s.size(); ++i) {
while (k && s[k + 1] != s[i])
k = U[k];
if (s[k + 1] == s[i])
k++;
U[i] = k;
}
int i = s.size() - 1;
for (; i; --i)
if (U[i] && i % (i - U[i]) == 0) {
fout << i << "\n";
break;
}
if (!i)
fout << 0 << "\n";
cout << s << "\n";
for (int i = 1; i < s.size(); ++i)
cout << i << " " << U[i] << "\n";
cout << "\n";
}
}