#include<bits/stdc++.h>
using namespace std;
long long dp1[1001][1001], dp2[1001][1001], ans[1001][1001], is_palin[1001][1001];
int main()
{
//freopen("input14.txt","r",stdin);
//freopen("output14.txt","w",stdout);
string t;
cin >> t;
string s = '$' + t;
int n = s.size();
for(int i = 0; i < s.size(); i++)
{
for(int j = 0; j < s.size(); j++)
{
dp1[i][j] = dp2[i][j] = ans[i][j] = is_palin[i][j] = 0;
}
}
for(int k = 1; k < n; k++)
{
for(int j = k, i = 1; j < n; j++, i++)
{
if(s[i] == s[j])
{
if(j - i <= 2)
{
is_palin[i][j] = 1;
}
else
{
if(is_palin[i + 1][j - 1])
{
is_palin[i][j] = 1;
}
}
}
}
}
for(int k = 1; k < n; k++)
{
for(int j = k, i = 1; j < n; i++, j++)
{
if(is_palin[i][j])
{
dp1[i][j] = dp1[i][j - 1] + 1;
}
else
{
dp1[i][j] = dp1[i][j - 1];
}
}
}
for(int k = n - 1; k >= 1; k--)
{
for(int j = k, i = k; i >= 1; i--)
{
if(is_palin[i][j])
{
dp2[i][j] = dp2[i + 1][j] + 1;
}
else
{
dp2[i][j] = dp2[i + 1][j];
}
}
}
for(int k = 1; k < n; k++)
{
for(int j = k, i = 1; j < n; i++, j++)
{
if(s[i] == s[j] && i != j)
{
if(j - i == 1) ans[i][j] = 1;
else if(j - i == 2) ans[i][j] = 3;
else
{
ans[i][j] = 1 + ans[i + 1][j - 1] + dp1[i + 1][j - 2] + dp2[i + 2][j - 1];
if(is_palin[i + 1][ j - 1]) ans[i][j] += 2;
}
}
}
}
long long result(0);
for(int i = 1; i < n; i++)
{
for(int j = 1; j < n; j++)
{
result += ans[i][j];
}
}
cout << result << endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKbG9uZyBsb25nIGRwMVsxMDAxXVsxMDAxXSwgZHAyWzEwMDFdWzEwMDFdLCBhbnNbMTAwMV1bMTAwMV0sIGlzX3BhbGluWzEwMDFdWzEwMDFdOwppbnQgbWFpbigpCnsKICAgIC8vZnJlb3BlbigiaW5wdXQxNC50eHQiLCJyIixzdGRpbik7CiAgICAvL2ZyZW9wZW4oIm91dHB1dDE0LnR4dCIsInciLHN0ZG91dCk7CiAgICBzdHJpbmcgdDsKICAgIGNpbiA+PiB0OwogICAgc3RyaW5nIHMgPSAnJCcgKyB0OwogICAgaW50IG4gPSBzLnNpemUoKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsgaSsrKQogICAgewogICAgICAgIGZvcihpbnQgaiA9IDA7IGogPCBzLnNpemUoKTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgZHAxW2ldW2pdID0gZHAyW2ldW2pdID0gYW5zW2ldW2pdID0gaXNfcGFsaW5baV1bal0gPSAwOwogICAgICAgIH0KICAgIH0KICAgIGZvcihpbnQgayA9IDE7IGsgPCBuOyBrKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gaywgaSA9IDE7IGogPCBuOyBqKyssIGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGlmKHNbaV0gPT0gc1tqXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoaiAtIGkgPD0gMikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpc19wYWxpbltpXVtqXSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYoaXNfcGFsaW5baSArIDFdW2ogLSAxXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhbGluW2ldW2pdID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGsgPSAxOyBrIDwgbjsgaysrKQogICAgewogICAgICAgIGZvcihpbnQgaiA9IGssIGkgPSAxOyBqIDwgbjsgaSsrLCBqKyspCiAgICAgICAgewogICAgICAgICAgICBpZihpc19wYWxpbltpXVtqXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZHAxW2ldW2pdID0gZHAxW2ldW2ogLSAxXSArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkcDFbaV1bal0gPSBkcDFbaV1baiAtIDFdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZm9yKGludCBrID0gbiAtIDE7IGsgPj0gMTsgay0tKQogICAgewogICAgICAgIGZvcihpbnQgaiA9IGssIGkgPSBrOyBpID49IDE7IGktLSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKGlzX3BhbGluW2ldW2pdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkcDJbaV1bal0gPSBkcDJbaSArIDFdW2pdICsgMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRwMltpXVtqXSA9IGRwMltpICsgMV1bal07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IGsgPSAxOyBrIDwgbjsgaysrKQogICAgewogICAgICAgIGZvcihpbnQgaiA9IGssIGkgPSAxOyBqIDwgbjsgaSsrLCBqKyspCiAgICAgICAgewogICAgICAgICAgICBpZihzW2ldID09IHNbal0gJiYgaSAhPSBqKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihqIC0gaSA9PSAxKSBhbnNbaV1bal0gPSAxOwogICAgICAgICAgICAgICAgZWxzZSBpZihqIC0gaSA9PSAyKSBhbnNbaV1bal0gPSAzOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGFuc1tpXVtqXSA9IDEgKyBhbnNbaSArIDFdW2ogLSAxXSArIGRwMVtpICsgMV1baiAtIDJdICsgZHAyW2kgKyAyXVtqIC0gMV07CiAgICAgICAgICAgICAgICAgICAgaWYoaXNfcGFsaW5baSArIDFdWyBqIC0gMV0pIGFuc1tpXVtqXSArPSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgbG9uZyBsb25nIHJlc3VsdCgwKTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgZm9yKGludCBqID0gMTsgaiA8IG47IGorKykKICAgICAgICB7CiAgICAgICAgICAgIHJlc3VsdCArPSBhbnNbaV1bal07CiAgICAgICAgfQogICAgfQogICAgY291dCA8PCByZXN1bHQgPDwgZW5kbDsKfQ==