#include <iostream>
#include <string>
using namespace std;
unsigned int stringpow(const string &s)
{
unsigned int answer = 1;
const unsigned int size = s.size();
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 (s.compare(j, i, s, j+i, i) != 0)
{
not_broken = 0;
break;
}
}
if (not_broken)
{
//Если предполагаемая степень строки оказалась верной, возвращаем её.
answer = size/i;
break;
}
}
}
return answer;
}
int main()
{
string s; //Выделяем переменную класса "строка"
while (cin >> s)
cout << stringpow(s) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdW5zaWduZWQgaW50IHN0cmluZ3Bvdyhjb25zdCBzdHJpbmcgJnMpCnsKCXVuc2lnbmVkIGludCBhbnN3ZXIgPSAxOwoJY29uc3QgdW5zaWduZWQgaW50IHNpemUgPSBzLnNpemUoKTsKCWZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgc2l6ZS8yKzE7ICsraSkKCXsKCQkvKgoJCdCY0YnQtdC8INC/0YDQtdC00L/QvtC70LDQs9Cw0LXQvNGD0Y4g0YHRgtC10L/QtdC90Ywg0LTQu9GPINC+0YLQstC10YLQsCwg0LrQvtGC0L7RgNCw0Y8KCQnQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+INGP0LLQu9GP0LXRgtGB0Y8g0LTQtdC70LjRgtC10LvQtdC8INC00LvQuNC90Ysg0YHRgtGA0L7QutC4LgoJCSovCgkJaWYgKHNpemUgJSBpID09IDApCgkJewoJCQlib29sIG5vdF9icm9rZW4gPSAxOyAvL9C/0YDQtdC00L/QvtC70LDQs9Cw0LXQvCwg0YfRgtC+INCy0YvQsdGA0LDQvdC90LDRjyDRgdGC0LXQv9C10L3RjCDRgdGC0YDQvtC60Lgg0LzQsNC60YHQuNC80LDQu9GM0L3QsAoJCQlmb3IgKGludCBqID0gMDsgaiA8IHNpemUtaTsgaiArPSBpKQoJCQl7CgkJCQkvL9GB0YDQsNCy0L3QuNCy0LDQtdC8INCx0LvQvtC60Lgg0YHRgtGA0L7QutC4CgkJCQlpZiAocy5jb21wYXJlKGosIGksIHMsIGoraSwgaSkgIT0gMCkKCQkJCXsKCQkJCQlub3RfYnJva2VuID0gMDsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkKCQkJaWYgKG5vdF9icm9rZW4pCgkJCXsKCQkJCS8v0JXRgdC70Lgg0L/RgNC10LTQv9C+0LvQsNCz0LDQtdC80LDRjyDRgdGC0LXQv9C10L3RjCDRgdGC0YDQvtC60Lgg0L7QutCw0LfQsNC70LDRgdGMINCy0LXRgNC90L7QuSwg0LLQvtC30LLRgNCw0YnQsNC10Lwg0LXRkS4KCQkJCWFuc3dlciA9IHNpemUvaTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoJcmV0dXJuIGFuc3dlcjsKfQoKaW50IG1haW4oKQp7CglzdHJpbmcgczsgLy/QktGL0LTQtdC70Y/QtdC8INC/0LXRgNC10LzQtdC90L3Rg9GOINC60LvQsNGB0YHQsCAi0YHRgtGA0L7QutCwIgoJd2hpbGUgKGNpbiA+PiBzKQoJCWNvdXQgPDwgc3RyaW5ncG93KHMpIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==