#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include <vector>
using namespace std;
const int MOD = 1000003;
long long k;
vector<unsigned int> h[MOD];
char st[5010];
unsigned long long p[5010];
int len;
unsigned int prevh;
void calcp()
{
p[0] = 1;
for (int i = 1; i < len; i++)
p[i] = p[i - 1] * 107;
}
void findsubstr()
{
int ind = prevh % MOD;
bool f = 0;
for (int i = 0; i < h[ind].size(); i++)
{
if (h[ind][i] == prevh)
{
f = 1;
break;
}
}
if (f) return;
h[ind].push_back(prevh);
k++;
}
int main()
{
scanf("%s", &st);
len = strlen(st);
calcp();
for (int r = len - 1; r >= 0; r--)
{
for (int l = r; l >= 0; l--)
{
prevh = l == r ? st[l] - 'a' + 1 : (st[l] - 'a' + 1) * p[r - l] + prevh;
findsubstr();
}
}
printf("%I64d", k);
return 0;
}
I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx2ZWN0b3I+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE1PRCA9IDEwMDAwMDM7CmxvbmcgbG9uZyBrOwp2ZWN0b3I8dW5zaWduZWQgaW50PiBoW01PRF07CmNoYXIgc3RbNTAxMF07CnVuc2lnbmVkIGxvbmcgbG9uZyBwWzUwMTBdOwppbnQgbGVuOwp1bnNpZ25lZCBpbnQgcHJldmg7Cgp2b2lkIGNhbGNwKCkKewoJcFswXSA9IDE7Cglmb3IgKGludCBpID0gMTsgaSA8IGxlbjsgaSsrKQoJCXBbaV0gPSBwW2kgLSAxXSAqIDEwNzsKfQoKdm9pZCBmaW5kc3Vic3RyKCkKewoJaW50IGluZCA9IHByZXZoICUgTU9EOwoJYm9vbCBmID0gMDsKCWZvciAoaW50IGkgPSAwOyBpIDwgaFtpbmRdLnNpemUoKTsgaSsrKQoJewoJCWlmIChoW2luZF1baV0gPT0gcHJldmgpCgkJewoJCQlmID0gMTsKCQkJYnJlYWs7CgkJfQoJfQoJaWYgKGYpIHJldHVybjsKCWhbaW5kXS5wdXNoX2JhY2socHJldmgpOwoJaysrOwp9CgppbnQgbWFpbigpCnsKCXNjYW5mKCIlcyIsICZzdCk7CglsZW4gPSBzdHJsZW4oc3QpOwoJY2FsY3AoKTsKCWZvciAoaW50IHIgPSBsZW4gLSAxOyByID49IDA7IHItLSkKCXsKCQlmb3IgKGludCBsID0gcjsgbCA+PSAwOyBsLS0pCgkJewoJCQlwcmV2aCA9IGwgPT0gciA/IHN0W2xdIC0gJ2EnICsgMSA6IChzdFtsXSAtICdhJyArIDEpICogcFtyIC0gbF0gKyBwcmV2aDsKCQkJZmluZHN1YnN0cigpOwoJCX0KCX0KCXByaW50ZigiJUk2NGQiLCBrKTsKCXJldHVybiAwOwp9Cg==