#include <bits/stdc++.h>

using namespace std;

#define all(x) begin(x), end(x)
#define int int64_t

const int maxn = 1001;

int pre[maxn][maxn], suf[maxn][maxn], is_pal[maxn][maxn], lcp[maxn][maxn];

signed main() {
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin >> s;
	int n = s.size();
	for(int i = 0; i < n; i++) {
		is_pal[i][i] = 1;
		pre[i][i] = suf[i][i] = 2;
		if(i > 0) {
			is_pal[i][i - 1] = pre[i][i - 1] = suf[i][i - 1] = 1;
		}
	}
	for(int i = 0; i < n; i++) {
		for(int j = i + 1; j < n; j++) {
			lcp[i][j] = (s[i] == s[j]) * (1 + (i > 0 && j + 1 < n ? lcp[i - 1][j + 1] : 0));
		}
	}
	for(int len = 1; len < n; len++) {
		for(int i = 0; i + len < n; i++) {
			is_pal[i][i + len] = (s[i] == s[i + len]) * is_pal[i + 1][i + len - 1];
			pre[i][i + len] = is_pal[i][i + len] + pre[i][i + len - 1];
			suf[i][i + len] = is_pal[i][i + len] + suf[i + 1][i + len];
		}
	}
	int ans = 0;
	for(int i = 0; i < n; i++) {
		for(int j = i + 1; j < n; j++) {
			ans += lcp[i][j] * (pre[i + 1][j - 1] + suf[i + 1][j - 1] - 1);
		}
	}
	cout << ans << endl;
	return 0;
}
