#include #include #include #include using namespace std; const int MAXN = 820; char s[MAXN]; int same[MAXN][MAXN]; int match[MAXN]; int main() { cin >> s; int n = strlen(s); memset(same, 0, sizeof(same)); for (int i = n - 1; i >= 0; --i) { for (int j = i+1; j < n; ++j) { if (s[i] == s[j]) same[i][j] = 1 + same[i + 1][j + 1]; same[j][i] = same[i][j]; } } long long ans = 0, sa = 0; for (int i = 0; i < n; ++i) { for (int j = i; j < n; ++j) { int l1 = j - i + 1; int ps = 0; for (int k = 0; k < n; ++k) { match[k] = same[k][i] >= l1; ps += match[k]; } int start = max(i - l1 + 1, 0), end = j; for (int k = start; k <= end; ++k) ps -= match[k]; sa += ps; for (int k = i-1; k >= 0; --k) { start--; end++; if(start >= 0) ps -= match[start]; if(end < n) ps -= match[end]; if (same[k][j + 1] >= i-k) ans += ps; } } } cout << ans + sa/2 << endl; return 0; }