/// Author : Nguyễn Thái Sơn - Ti20 - THPT chuyên Lương Thế Vinh
#include<bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/trie_policy.hpp>
//#include <ext/rope>
//#pragma GCC optimize("Ofast")
//#pragma GCC optimization("unroll-loops, no-stack-protector")
//#pragma GCC target("avx,avx2,fma")
//using namespace std;
//using namespace __gnu_pbds;
//using namespace __gnu_cxx;
#define fi first
#define se second
#define TASK "test"
#define pb push_back
#define EL cout << endl
#define Ti20_ntson int main()
#define in(x) cout << x << endl
#define all(x) (x).begin(),(x).end()
#define getbit(x, i) (((x) >> (i)) & 1)
#define cntbit(x) __builtin_popcount(x)
#define FOR(i,l,r) for (int i = l; i <= r; i++)
#define FORD(i,l,r) for (int i = l; i >= r; i--)
#define Debug(a,n) for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> vii;
typedef unsigned long long ull;
typedef vector<vector<int>> vvi;
const int N = 1e6 + 5;
const int oo = INT_MAX;
const ll mod = 1e9 + 7;
const int d4x[4] = {-1, 0, 1, 0} , d4y[4] = {0, 1, 0, -1};
const int d8x[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, d8y[8] = {0, 1, 1, 1, 0, -1, -1, -1};
const int Base = 311;
string T, s;
int n;
long long Ans = 0, Pow[100];
int pre[N], suf[N];
struct HASH {
long long Hash[100];
int n;
void build(int _n, string s) {
n = _n;
for (int i = 1; i <= n; i++)
Hash[i] = (Hash[i - 1] * Base + s[i - 1] - 'a' + 1) % mod;
}
int Get(int l, int r) {
if (r > n || l < 1) return -1;
return (Hash[r] - Hash[l - 1] * Pow[r - l + 1] + mod * mod) % mod;
}
}HashT, HashS;
inline void Read_Input() {
Pow[0] = 1;
FOR(i, 1, 80)
Pow[i] = Pow[i - 1] * Base % mod;
cin >> T;
int nt = T.size();
HashT.build(nt, T);
int __;
cin >> __;
FOR(i, 1, __) {
cin >> s;
n = s.size();
HashS.build(n, s);
// cout << HashT.Get(1, 2) << " " << HashS.Get(2, 3) << endl;
FOR(j, 1, n - nt + 1)
if (HashS.Get(j, j + nt - 1) == HashT.Get(1, nt)) Ans += 2 * __;
FOR(j, 1, nt)
if (HashT.Get(j, nt) == HashS.Get(1, nt - j + 1)) {
// cout << "SUF " << nt - j + 1 << endl;
suf[nt - j + 1]++;
}
FOR(j, 2, nt)
if (HashT.Get(j, nt) == HashS.Get(1, nt - j + 1))
Ans += pre[j - 1];
FOR(j, 1, nt)
if (HashT.Get(1, j) == HashS.Get(n - j + 1, n))
Ans += suf[nt - j];
FOR(j, 1, nt - 1)
if (HashT.Get(1, j) == HashS.Get(n - j + 1, n)) {
// cout << "PRE " << j << endl;
pre[j]++;
}
// cout << "ANS " << Ans << endl << endl;
}
}
inline void Solve() {
cout << Ans;
}
Ti20_ntson {
// freopen(TASK".INP","r",stdin);
// freopen(TASK".OUT","w",stdout);
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
int T = 1;
while (T -- ) {
Read_Input();
Solve();
}
}
Ly8vIEF1dGhvciA6IE5ndXnhu4VuIFRow6FpIFPGoW4gLSBUaTIwIC0gVEhQVCBjaHV5w6puIEzGsMahbmcgVGjhur8gVmluaAoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KLy8jaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+Ci8vI2luY2x1ZGUgPGV4dC9wYl9kcy90cmllX3BvbGljeS5ocHA+Ci8vI2luY2x1ZGUgPGV4dC9yb3BlPgoKLy8jcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QiKQovLyNwcmFnbWEgR0NDIG9wdGltaXphdGlvbigidW5yb2xsLWxvb3BzLCBuby1zdGFjay1wcm90ZWN0b3IiKQovLyNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4LGF2eDIsZm1hIikKCi8vdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKLy91c2luZyBuYW1lc3BhY2UgX19nbnVfY3h4OwoKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIFRBU0sgInRlc3QiCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgRUwgY291dCA8PCBlbmRsCiNkZWZpbmUgVGkyMF9udHNvbiBpbnQgbWFpbigpCiNkZWZpbmUgaW4oeCkgY291dCA8PCB4IDw8IGVuZGwKI2RlZmluZSBhbGwoeCkgKHgpLmJlZ2luKCksKHgpLmVuZCgpCiNkZWZpbmUgZ2V0Yml0KHgsIGkpICgoKHgpID4+IChpKSkgJiAxKQojZGVmaW5lIGNudGJpdCh4KSBfX2J1aWx0aW5fcG9wY291bnQoeCkKI2RlZmluZSBGT1IoaSxsLHIpIGZvciAoaW50IGkgPSBsOyBpIDw9IHI7IGkrKykKI2RlZmluZSBGT1JEKGksbCxyKSBmb3IgKGludCBpID0gbDsgaSA+PSByOyBpLS0pCiNkZWZpbmUgRGVidWcoYSxuKSBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNvdXQgPDwgYVtpXSA8PCAiICI7IGNvdXQgPDwgZW5kbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHZlY3RvcjxpbnQ+IHZpOwp0eXBlZGVmIHBhaXI8aW50LGludD4gdmlpOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgdmVjdG9yPHZlY3RvcjxpbnQ+PiB2dmk7Cgpjb25zdCBpbnQgTiA9IDFlNiArIDU7CmNvbnN0IGludCBvbyA9IElOVF9NQVg7CmNvbnN0IGxsIG1vZCA9IDFlOSArIDc7CmNvbnN0IGludCBkNHhbNF0gPSB7LTEsIDAsIDEsIDB9ICwgZDR5WzRdID0gezAsIDEsIDAsIC0xfTsKY29uc3QgaW50IGQ4eFs4XSA9IHstMSwgLTEsIDAsIDEsIDEsIDEsIDAsIC0xfSwgZDh5WzhdID0gezAsIDEsIDEsIDEsIDAsIC0xLCAtMSwgLTF9Owpjb25zdCBpbnQgQmFzZSA9IDMxMTsKCnN0cmluZyBULCBzOwppbnQgbjsKbG9uZyBsb25nIEFucyA9IDAsIFBvd1sxMDBdOwppbnQgcHJlW05dLCBzdWZbTl07CgpzdHJ1Y3QgSEFTSCB7CiAgICBsb25nIGxvbmcgSGFzaFsxMDBdOwogICAgaW50IG47CgogICAgdm9pZCBidWlsZChpbnQgX24sIHN0cmluZyBzKSB7CiAgICAgICAgbiA9IF9uOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykKICAgICAgICAgICAgSGFzaFtpXSA9IChIYXNoW2kgLSAxXSAqIEJhc2UgKyBzW2kgLSAxXSAtICdhJyArIDEpICUgbW9kOwogICAgfQoKICAgIGludCBHZXQoaW50IGwsIGludCByKSB7CiAgICAgICAgaWYgKHIgPiBuIHx8IGwgPCAxKSByZXR1cm4gLTE7CiAgICAgICAgcmV0dXJuIChIYXNoW3JdIC0gSGFzaFtsIC0gMV0gKiBQb3dbciAtIGwgKyAxXSArIG1vZCAqIG1vZCkgJSBtb2Q7CiAgICB9Cgp9SGFzaFQsIEhhc2hTOwoKaW5saW5lIHZvaWQgUmVhZF9JbnB1dCgpIHsKICAgIFBvd1swXSA9IDE7CiAgICBGT1IoaSwgMSwgODApCiAgICAgICAgUG93W2ldID0gUG93W2kgLSAxXSAqIEJhc2UgJSBtb2Q7CiAgICBjaW4gPj4gVDsKICAgIGludCBudCA9IFQuc2l6ZSgpOwogICAgSGFzaFQuYnVpbGQobnQsIFQpOwogICAgaW50IF9fOwogICAgY2luID4+IF9fOwogICAgRk9SKGksIDEsIF9fKSB7CiAgICAgICAgY2luID4+IHM7CiAgICAgICAgbiA9IHMuc2l6ZSgpOwogICAgICAgIEhhc2hTLmJ1aWxkKG4sIHMpOwovLyAgICAgICAgY291dCA8PCBIYXNoVC5HZXQoMSwgMikgPDwgIiAiIDw8IEhhc2hTLkdldCgyLCAzKSA8PCBlbmRsOwogICAgICAgIEZPUihqLCAxLCBuIC0gbnQgKyAxKQogICAgICAgICAgICBpZiAoSGFzaFMuR2V0KGosIGogKyBudCAtIDEpID09IEhhc2hULkdldCgxLCBudCkpIEFucyArPSAyICogX187CgogICAgICAgIEZPUihqLCAxLCBudCkKICAgICAgICAgICAgaWYgKEhhc2hULkdldChqLCBudCkgPT0gSGFzaFMuR2V0KDEsIG50IC0gaiArIDEpKSB7Ci8vICAgICAgICAgICAgICAgIGNvdXQgPDwgIlNVRiAiIDw8IG50IC0gaiArIDEgPDwgZW5kbDsKICAgICAgICAgICAgICAgIHN1ZltudCAtIGogKyAxXSsrOwogICAgICAgICAgICB9CiAgICAgICAgIEZPUihqLCAyLCBudCkKICAgICAgICAgICAgaWYgKEhhc2hULkdldChqLCBudCkgPT0gSGFzaFMuR2V0KDEsIG50IC0gaiArIDEpKQogICAgICAgICAgICAgICAgQW5zICs9IHByZVtqIC0gMV07CiAgICAgICAgRk9SKGosIDEsIG50KQogICAgICAgICAgICBpZiAoSGFzaFQuR2V0KDEsIGopID09IEhhc2hTLkdldChuIC0gaiArIDEsIG4pKQogICAgICAgICAgICAgICAgQW5zICs9IHN1ZltudCAtIGpdOwogICAgICAgIEZPUihqLCAxLCBudCAtIDEpCiAgICAgICAgICAgIGlmIChIYXNoVC5HZXQoMSwgaikgPT0gSGFzaFMuR2V0KG4gLSBqICsgMSwgbikpIHsKLy8gICAgICAgICAgICAgICAgY291dCA8PCAiUFJFICIgPDwgaiA8PCBlbmRsOwogICAgICAgICAgICAgICAgcHJlW2pdKys7CiAgICAgICAgICAgIH0KLy8gICAgICAgIGNvdXQgPDwgIkFOUyAiIDw8IEFucyA8PCBlbmRsIDw8IGVuZGw7CiAgICB9Cn0KCmlubGluZSB2b2lkIFNvbHZlKCkgewogICAgY291dCA8PCBBbnM7Cn0KClRpMjBfbnRzb24gewovLyAgICBmcmVvcGVuKFRBU0siLklOUCIsInIiLHN0ZGluKTsKLy8gICAgZnJlb3BlbihUQVNLIi5PVVQiLCJ3IixzdGRvdXQpOwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaW50IFQgPSAxOwogICAgd2hpbGUgKFQgLS0gKSB7CiAgICAgICAgUmVhZF9JbnB1dCgpOwogICAgICAgIFNvbHZlKCk7CiAgICB9Cn0K