#include <bits/stdc++.h>
using namespace std;
long long n, sizeS;
string s;
map<long long, long long> dem_l, dem_r, ans_r, ans_l;
#define base 31
long long MOD = 1e9 + 7;
long long hash_l[1000005];
long long poww[1000005];
long long hash_r[1000005];
long long gethash_l(long long l, long long r)
{
return (hash_l[r] - hash_l[l - 1] * poww[r - l + 1] + MOD * MOD) % MOD;
}
long long gethash_r(long long l, long long r)
{
return (hash_r[l] - hash_r[r + 1] * poww[r - l + 1] + MOD * MOD) % MOD;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
poww[0] = 1;
for (int i = 1; i <= 1e6; i ++) poww[i] = (poww[i - 1] % MOD * base % MOD) % MOD;
while (n --)
{
cin >> sizeS >> s;
s = ' ' + s;
hash_l[0] = 0;
hash_r[sizeS + 1] = 0;
for (int i = 1; i <= sizeS; i ++) hash_l[i] = (hash_l[i - 1] * base + s[i] - 'a' + 1) % MOD;
dem_l[hash_l[sizeS]] ++;
for (int i = sizeS; i >= 1; i --) hash_r[i] = (hash_r[i + 1] * base + s[i] - 'a' + 1) % MOD;
dem_r[hash_r[1]] ++;
for (int i = 1; i <= sizeS; i ++)
{
/// i thằng đầu tiên
/// phần còn lại của xâu sẽ là [i, size] co la xdx hay khong
long long size = (sizeS - i + 1) / 2;
if (gethash_l(i, i + size - 1) == hash_r[sizeS - size + 1]) ans_l[hash_l[i - 1]] ++;
}
for (int i = sizeS; i >= 1; i --)
{
long long size = i / 2;
if (gethash_r(i - size + 1, i) == hash_l[size]) ans_r[hash_r[i + 1]] ++;
}
}
long long ans = 0;
for(auto x : dem_l)
{
ans += x.second * dem_r[x.first];
ans += x.second * ans_r[x.first];
}
for(auto x : dem_r) ans += x.second * ans_l[x.first];
cout << ans;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsb25nIGxvbmcgbiwgc2l6ZVM7CnN0cmluZyBzOwptYXA8bG9uZyBsb25nLCBsb25nIGxvbmc+IGRlbV9sLCBkZW1fciwgYW5zX3IsIGFuc19sOwojZGVmaW5lIGJhc2UgMzEKbG9uZyBsb25nIE1PRCA9IDFlOSArIDc7CmxvbmcgbG9uZyBoYXNoX2xbMTAwMDAwNV07CmxvbmcgbG9uZyBwb3d3WzEwMDAwMDVdOwpsb25nIGxvbmcgaGFzaF9yWzEwMDAwMDVdOwpsb25nIGxvbmcgZ2V0aGFzaF9sKGxvbmcgbG9uZyBsLCBsb25nIGxvbmcgcikKewogICAgcmV0dXJuIChoYXNoX2xbcl0gLSBoYXNoX2xbbCAtIDFdICogcG93d1tyIC0gbCArIDFdICsgTU9EICogTU9EKSAlIE1PRDsKfQpsb25nIGxvbmcgZ2V0aGFzaF9yKGxvbmcgbG9uZyBsLCBsb25nIGxvbmcgcikKewogICAgcmV0dXJuIChoYXNoX3JbbF0gLSBoYXNoX3JbciArIDFdICogcG93d1tyIC0gbCArIDFdICsgTU9EICogTU9EKSAlIE1PRDsKfQppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQudGllKE5VTEwpOwogICAgY2luID4+IG47CiAgICBwb3d3WzBdID0gMTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDFlNjsgaSArKykgcG93d1tpXSA9IChwb3d3W2kgLSAxXSAlIE1PRCAqIGJhc2UgJSBNT0QpICUgTU9EOwogICAgd2hpbGUgKG4gLS0pCiAgICB7CiAgICAgICAgY2luID4+IHNpemVTID4+IHM7CiAgICAgICAgcyA9ICcgJyArIHM7CiAgICAgICAgaGFzaF9sWzBdID0gMDsKICAgICAgICBoYXNoX3Jbc2l6ZVMgKyAxXSA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gc2l6ZVM7IGkgKyspIGhhc2hfbFtpXSA9IChoYXNoX2xbaSAtIDFdICogYmFzZSArIHNbaV0gLSAnYScgKyAxKSAlIE1PRDsKICAgICAgICBkZW1fbFtoYXNoX2xbc2l6ZVNdXSArKzsKICAgICAgICBmb3IgKGludCBpID0gc2l6ZVM7IGkgPj0gMTsgaSAtLSkgaGFzaF9yW2ldID0gKGhhc2hfcltpICsgMV0gKiBiYXNlICsgc1tpXSAtICdhJyArIDEpICUgTU9EOwogICAgICAgIGRlbV9yW2hhc2hfclsxXV0gKys7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gc2l6ZVM7IGkgKyspCiAgICAgICAgewogICAgICAgICAgICAvLy8gaSB0aOG6sW5nIMSR4bqndSB0acOqbgogICAgICAgICAgICAvLy8gcGjhuqduIGPDsm4gbOG6oWkgY+G7p2EgeMOidSBz4bq9IGzDoCBbaSwgc2l6ZV0gY28gbGEgeGR4IGhheSBraG9uZyAKICAgICAgICAgICAgIAogICAgICAgICAgICAKICAgICAgICAgICAgbG9uZyBsb25nIHNpemUgPSAoc2l6ZVMgLSBpICsgMSkgLyAyOwogICAgICAgICAgICBpZiAoZ2V0aGFzaF9sKGksIGkgKyBzaXplIC0gMSkgPT0gaGFzaF9yW3NpemVTIC0gc2l6ZSArIDFdKSBhbnNfbFtoYXNoX2xbaSAtIDFdXSArKzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yIChpbnQgaSA9IHNpemVTOyBpID49IDE7IGkgLS0pCiAgICAgICAgewogICAgICAgICAgICBsb25nIGxvbmcgc2l6ZSA9IGkgLyAyOwogICAgICAgICAgICBpZiAoZ2V0aGFzaF9yKGkgLSBzaXplICsgMSwgaSkgPT0gaGFzaF9sW3NpemVdKSBhbnNfcltoYXNoX3JbaSArIDFdXSArKzsKICAgICAgICB9CiAgICB9CiAgICBsb25nIGxvbmcgYW5zID0gMDsKICAgIGZvcihhdXRvIHggOiBkZW1fbCkKICAgIHsKICAgICAgICBhbnMgKz0geC5zZWNvbmQgKiBkZW1fclt4LmZpcnN0XTsKICAgICAgICBhbnMgKz0geC5zZWNvbmQgKiBhbnNfclt4LmZpcnN0XTsKICAgIH0KICAgIGZvcihhdXRvIHggOiBkZW1fcikgYW5zICs9IHguc2Vjb25kICogYW5zX2xbeC5maXJzdF07CiAgICBjb3V0IDw8IGFuczsKfQo=