#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define all(x) (x).begin(), (x).end()
#define MASK(i) (1LL << (i))
#define BIT(i, n) (((n) >> (i)) & 1)
typedef long long ll;
typedef pair<int, int> pii;
template <class X, class Y> bool mini(X& x, const Y& y) {
if(x > y){ x = y; return 1; }
return 0;
}
template <class X, class Y> bool maxi(X& x, const Y& y) {
if(x < y){ x = y; return 1; }
return 0;
}
const int N = 2e3 + 5;
string s;
int n;
bitset<N> pal[N];
ll ans = 0;
void prepare()
{
for(int i = 1; i <= n; ++i){
int l = i, r = i;
while(l >= 1 && r <= n && s[l] == s[r])
pal[l--][r++] = 1;
l = i, r = i + 1;
while(l >= 1 && r <= n && s[l] == s[r])
pal[l--][r++] = 1;
}
}
namespace sub2
{
bool check()
{
return n <= 100;
}
void run()
{
for(int i1 = 1; i1 <= n; ++i1) for(int j1 = i1; j1 <= n; ++j1) if(pal[i1][j1]){
for(int i2 = j1 + 1; i2 <= n; ++i2) for(int j2 = i2; j2 <= n; ++j2) if(pal[i2][j2]){
++ans;
}
}
cout << ans;
}
}
namespace sub4
{
int cnten[N], cntst[N];
void prepareSub4()
{
for(int i = 1; i <= n; ++i){
for(int len = 1; len <= i; ++len){
cnten[i] += pal[i - len + 1][i];
}
}
for(int i = n; i; --i){
for(int len = 1; i + len - 1 <= n; ++len){
cntst[i] += pal[i][i + len - 1];
}
}
}
void run()
{
prepareSub4();
for(int j1 = 1; j1 <= n; ++j1){
for(int i2 = j1 + 1; i2 <= n; ++i2){
ans += 1LL * cnten[j1] * cntst[i2];
}
}
cout << ans;
}
}
int main()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
#define file "PALINPAIRS"
if(fopen(file".inp", "r")){
freopen(file".inp", "r", stdin);
freopen(file".out", "w", stdout);
}
cin >> s;
n = s.size(), s = '#' + s;
prepare();
// sub2::run(); cerr << "\n";
// sub4::run();
if(sub2::check()) sub2::run();
else sub4::run();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksICh4KS5lbmQoKQojZGVmaW5lIE1BU0soaSkgKDFMTCA8PCAoaSkpCiNkZWZpbmUgQklUKGksIG4pICgoKG4pID4+IChpKSkgJiAxKQoKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxpbnQsIGludD4gcGlpOwoKdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+IGJvb2wgbWluaShYJiB4LCBjb25zdCBZJiB5KSB7CiAgICBpZih4ID4geSl7IHggPSB5OyByZXR1cm4gMTsgfQogICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBYLCBjbGFzcyBZPiBib29sIG1heGkoWCYgeCwgY29uc3QgWSYgeSkgewogICAgaWYoeCA8IHkpeyB4ID0geTsgcmV0dXJuIDE7IH0KICAgIHJldHVybiAwOwp9Cgpjb25zdCBpbnQgTiA9IDJlMyArIDU7CgpzdHJpbmcgczsKaW50IG47CmJpdHNldDxOPiBwYWxbTl07CmxsIGFucyA9IDA7Cgp2b2lkIHByZXBhcmUoKQp7CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47ICsraSl7CiAgICAgICAgaW50IGwgPSBpLCByID0gaTsKICAgICAgICB3aGlsZShsID49IDEgJiYgciA8PSBuICYmIHNbbF0gPT0gc1tyXSkKICAgICAgICAgICAgcGFsW2wtLV1bcisrXSA9IDE7CgogICAgICAgIGwgPSBpLCByID0gaSArIDE7CiAgICAgICAgd2hpbGUobCA+PSAxICYmIHIgPD0gbiAmJiBzW2xdID09IHNbcl0pCiAgICAgICAgICAgIHBhbFtsLS1dW3IrK10gPSAxOwogICAgfQp9CgpuYW1lc3BhY2Ugc3ViMgp7CiAgICBib29sIGNoZWNrKCkKICAgIHsKICAgICAgICByZXR1cm4gbiA8PSAxMDA7CiAgICB9CiAgICB2b2lkIHJ1bigpCiAgICB7CiAgICAgICAgZm9yKGludCBpMSA9IDE7IGkxIDw9IG47ICsraTEpIGZvcihpbnQgajEgPSBpMTsgajEgPD0gbjsgKytqMSkgaWYocGFsW2kxXVtqMV0pewogICAgICAgICAgICBmb3IoaW50IGkyID0gajEgKyAxOyBpMiA8PSBuOyArK2kyKSBmb3IoaW50IGoyID0gaTI7IGoyIDw9IG47ICsrajIpIGlmKHBhbFtpMl1bajJdKXsKICAgICAgICAgICAgICAgICsrYW5zOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBjb3V0IDw8IGFuczsKICAgIH0KfQoKbmFtZXNwYWNlIHN1YjQKewogICAgaW50IGNudGVuW05dLCBjbnRzdFtOXTsKICAgIHZvaWQgcHJlcGFyZVN1YjQoKQogICAgewogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgKytpKXsKICAgICAgICAgICAgZm9yKGludCBsZW4gPSAxOyBsZW4gPD0gaTsgKytsZW4pewogICAgICAgICAgICAgICAgY250ZW5baV0gKz0gcGFsW2kgLSBsZW4gKyAxXVtpXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yKGludCBpID0gbjsgaTsgLS1pKXsKICAgICAgICAgICAgZm9yKGludCBsZW4gPSAxOyBpICsgbGVuIC0gMSA8PSBuOyArK2xlbil7CiAgICAgICAgICAgICAgICBjbnRzdFtpXSArPSBwYWxbaV1baSArIGxlbiAtIDFdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgdm9pZCBydW4oKQogICAgewogICAgICAgIHByZXBhcmVTdWI0KCk7CiAgICAgICAgZm9yKGludCBqMSA9IDE7IGoxIDw9IG47ICsrajEpewogICAgICAgICAgICBmb3IoaW50IGkyID0gajEgKyAxOyBpMiA8PSBuOyArK2kyKXsKICAgICAgICAgICAgICAgIGFucyArPSAxTEwgKiBjbnRlbltqMV0gKiBjbnRzdFtpMl07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGNvdXQgPDwgYW5zOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCksIGNvdXQudGllKDApOwogICAgI2RlZmluZSBmaWxlICJQQUxJTlBBSVJTIgogICAgaWYoZm9wZW4oZmlsZSIuaW5wIiwgInIiKSl7CiAgICAgICAgZnJlb3BlbihmaWxlIi5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKGZpbGUiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gczsKICAgIG4gPSBzLnNpemUoKSwgcyA9ICcjJyArIHM7CgogICAgcHJlcGFyZSgpOwoKLy8gICAgc3ViMjo6cnVuKCk7IGNlcnIgPDwgIlxuIjsKLy8gICAgc3ViNDo6cnVuKCk7CgogICAgaWYoc3ViMjo6Y2hlY2soKSkgc3ViMjo6cnVuKCk7CiAgICBlbHNlIHN1YjQ6OnJ1bigpOwoKICAgIHJldHVybiAwOwp9Cg==