#include #include #include using namespace std; #define MAX 10001000 int n; // Délka řetězce char s[MAX]; // Řetězec int back[MAX]; // Zpětné hrany int main() { FILE *fr = fopen("vstup.in", "r"); FILE *fw = fopen("vystup.out", "w"); fscanf(fr, "%d", &n); fscanf(fr, " %s", s+1); // Zpětné hrany s[0] = '~'; back[0] = -1; // Zarážka pro zpětné hrany int p = 0; for (int i=1; i<=n; i++) { int k = i-1; // Najdi, kam bude ukazovat hrana z indexu i while (k>0) { if (s[back[k]+1]==s[i]) break; k = back[k]; } back[i] = back[k]+1; p = max(p, i-back[i]); // Je maximální? } // Kontrola periody bool b = (n%p==0); if (b) for (int i=0; i