#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define INF (1<<29) #define rep(i,n) for(int i=0;i<(int)(n);i++) #define all(v) v.begin(),v.end() #define uniq(v) v.erase(unique(all(v)),v.end()) bool palindrome[5000][5000]; int sum[5000]; int main() { ios::sync_with_stdio(0); cin.tie(0); string s; cin >> s; for (int i = 0; i < s.size();i++) { int a,b; a = i; b = i; while (0 <= a && b < s.size() && s[a] == s[b]) { palindrome[a][b] = true; a--; b++; } a = i; b = i + 1; while (0 <= a && b < s.size() && s[a] == s[b]) { palindrome[a][b] = true; a--; b++; } } for (int i = s.size() - 3; i >= 0;i--) { sum[i] += sum[i + 1]; if (palindrome[i + 2][s.size() - 1])sum[i]++; } long long ans = 0; for (int i = 0; i < s.size();i++) { if (!palindrome[0][i])continue; for (int j = i + 1; j < s.size();j++){ if (!palindrome[i+1][j])continue; ans += sum[j]; } } cout << ans << endl; return 0; }