#include <iostream>
#include <cstring>
using namespace std;
unsigned int cstringpow(const char *s)
{
unsigned int answer = 1;
const unsigned int size = strlen(s);
for (unsigned int i = 1; i < size/2+1; ++i)
{
/*
Ищем предполагаемую степень для ответа, которая
обязательно является делителем длины строки.
*/
if (size % i == 0)
{
bool not_broken = 1; //предполагаем, что выбранная степень строки максимальна
for (int j = 0; j < size-i; j += i)
{
//сравниваем блоки строки
if (strncmp(s+j, s+j+i, i) != 0)
{
not_broken = 0;
break;
}
}
if (not_broken)
{
//Если предполагаемая степень строки оказалась верной, возвращаем её.
answer = size/i;
break;
}
}
}
return answer;
}
int main()
{
char s[1000010]; //Выделяем память для строк
while (cin >> s)
cout << cstringpow(s) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnVuc2lnbmVkIGludCBjc3RyaW5ncG93KGNvbnN0IGNoYXIgKnMpCnsKCXVuc2lnbmVkIGludCBhbnN3ZXIgPSAxOwoJY29uc3QgdW5zaWduZWQgaW50IHNpemUgPSBzdHJsZW4ocyk7Cglmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IHNpemUvMisxOyArK2kpCgl7CgkJLyoKCQnQmNGJ0LXQvCDQv9GA0LXQtNC/0L7Qu9Cw0LPQsNC10LzRg9GOINGB0YLQtdC/0LXQvdGMINC00LvRjyDQvtGC0LLQtdGC0LAsINC60L7RgtC+0YDQsNGPCgkJ0L7QsdGP0LfQsNGC0LXQu9GM0L3QviDRj9Cy0LvRj9C10YLRgdGPINC00LXQu9C40YLQtdC70LXQvCDQtNC70LjQvdGLINGB0YLRgNC+0LrQuC4KCQkqLwoJCWlmIChzaXplICUgaSA9PSAwKQoJCXsKCQkJYm9vbCBub3RfYnJva2VuID0gMTsgLy/Qv9GA0LXQtNC/0L7Qu9Cw0LPQsNC10LwsINGH0YLQviDQstGL0LHRgNCw0L3QvdCw0Y8g0YHRgtC10L/QtdC90Ywg0YHRgtGA0L7QutC4INC80LDQutGB0LjQvNCw0LvRjNC90LAKCQkJZm9yIChpbnQgaiA9IDA7IGogPCBzaXplLWk7IGogKz0gaSkKCQkJewoJCQkJLy/RgdGA0LDQstC90LjQstCw0LXQvCDQsdC70L7QutC4INGB0YLRgNC+0LrQuAoJCQkJaWYgKHN0cm5jbXAocytqLCBzK2oraSwgaSkgIT0gMCkKCQkJCXsKCQkJCQlub3RfYnJva2VuID0gMDsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlpZiAobm90X2Jyb2tlbikKCQkJewoJCQkJLy/QldGB0LvQuCDQv9GA0LXQtNC/0L7Qu9Cw0LPQsNC10LzQsNGPINGB0YLQtdC/0LXQvdGMINGB0YLRgNC+0LrQuCDQvtC60LDQt9Cw0LvQsNGB0Ywg0LLQtdGA0L3QvtC5LCDQstC+0LfQstGA0LDRidCw0LXQvCDQtdGRLgoJCQkJYW5zd2VyID0gc2l6ZS9pOwoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CglyZXR1cm4gYW5zd2VyOwp9CgppbnQgbWFpbigpCnsKCWNoYXIgc1sxMDAwMDEwXTsgLy/QktGL0LTQtdC70Y/QtdC8INC/0LDQvNGP0YLRjCDQtNC70Y8g0YHRgtGA0L7QugoJd2hpbGUgKGNpbiA+PiBzKQoJCWNvdXQgPDwgY3N0cmluZ3BvdyhzKSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0=