// @author cthulhuhluhtc
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#pragma GCC optimize("no-stack-protector,unroll-loops")
#pragma GCC diagnostic ignored "-Wunused-result"
#pragma GCC diagnostic ignored "-Wunused-function"
#define _CRT_SECURE_NO_WARNINGS
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define eb emplace_back
#define F first
#define S second
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define forn(i, n) for (int i = 0; i < (int)(n); i++)
#define range(i, low, high) for (int i = (low); i < (high); i++)
#define rrange(i, low, high) for (int i = (high) - 1; i >= (low); i--)
#define checkbit(n, b) (((n) >> (b)) & 1)
#define setbit(n, b) ((n) | (static_cast<decay_t<decltype(n)>>(1) << (b)))
#define removebit(n, b) ((n) & ~(static_cast<decay_t<decltype(n)>>(1) << (b)))
#define flipbit(n, b) ((n) ^ (static_cast<decay_t<decltype(n)>>(1) << (b)))
#define ri(x) cin >> x
#define dri(x) int x; cin >> x
#define rii(x, y) cin >> x >> y
#define drii(x, y) int x, y; cin >> x >> y
#define riii(x, y, z) cin >> x >> y >> z
#define driii(x, y, z) int x, y, z; cin >> x >> y >> z
#define ms0(x) memset(x, 0, sizeof(x))
#define ms1(x) memset(x, -1, sizeof(x))
using namespace std;
typedef double db;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<vi> vvi;
typedef vector<pii> vpi;
ll dp[51][51][51][51];
vector<int> p[4][26];
void solve() {
int n = 4;
forn(i, n) {
string s; cin >> s;
forn(j, sz(s)) p[i][s[j] - 'a'].eb(j);
}
forn(i, 26) {
if (p[0][i].empty() || p[1][i].empty() || p[2][i].empty() || p[3][i].empty())
continue;
dp[p[0][i][0]][p[1][i][0]][p[2][i][0]][p[3][i][0]] = 1;
}
forn(i0, 51) forn(i1, 51) forn(i2, 51) forn(i3, 51) {
if (!dp[i0][i1][i2][i3]) continue;
forn(i, 26) {
auto t0 = upper_bound(all(p[0][i]), i0);
auto t1 = upper_bound(all(p[1][i]), i1);
auto t2 = upper_bound(all(p[2][i]), i2);
auto t3 = upper_bound(all(p[3][i]), i3);
if (t0 == p[0][i].end() || t1 == p[1][i].end() || t2 == p[2][i].end() || t3 == p[3][i].end()) continue;
dp[*t0][*t1][*t2][*t3] += dp[i0][i1][i2][i3];
}
}
ll ans = 0;
forn(i0, 51) forn(i1, 51) forn(i2, 51) forn(i3, 51) ans += dp[i0][i1][i2][i3];
cout << ans << "\n";
}
int main(int argc, char** argv) {
ios_base::sync_with_stdio(0); cin.tie(0);
cout.precision(20); cout << fixed;
clock_t clock_start = clock();
//freopen("a.in", "r", stdin);
//freopen("a.out", "w", stdout);
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
solve();
//cout << "Time elapsed: " << (ld)(clock() - clock_start) / CLOCKS_PER_SEC << "\n";
return 0;
}
Ly8gQGF1dGhvciBjdGh1bGh1aGx1aHRjCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgoKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0MgdGFyZ2V0KCJzc2Usc3NlMixzc2UzLHNzc2UzLHNzZTQscG9wY250LGFibSxtbXgsYXZ4LHR1bmU9bmF0aXZlIikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIm5vLXN0YWNrLXByb3RlY3Rvcix1bnJvbGwtbG9vcHMiKQojcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXJlc3VsdCIKI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKCiNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgbXQgbWFrZV90dXBsZQojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGViIGVtcGxhY2VfYmFjawojZGVmaW5lIEYgZmlyc3QKI2RlZmluZSBTIHNlY29uZAojZGVmaW5lIHN6KHgpICgoaW50KSh4KS5zaXplKCkpCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKCiNkZWZpbmUgZm9ybihpLCBuKSBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpKG4pOyBpKyspCiNkZWZpbmUgcmFuZ2UoaSwgbG93LCBoaWdoKSBmb3IgKGludCBpID0gKGxvdyk7IGkgPCAoaGlnaCk7IGkrKykKI2RlZmluZSBycmFuZ2UoaSwgbG93LCBoaWdoKSBmb3IgKGludCBpID0gKGhpZ2gpIC0gMTsgaSA+PSAobG93KTsgaS0tKQoKI2RlZmluZSBjaGVja2JpdChuLCBiKSAoKChuKSA+PiAoYikpICYgMSkKI2RlZmluZSBzZXRiaXQobiwgYikgKChuKSB8IChzdGF0aWNfY2FzdDxkZWNheV90PGRlY2x0eXBlKG4pPj4oMSkgPDwgKGIpKSkKI2RlZmluZSByZW1vdmViaXQobiwgYikgKChuKSAmIH4oc3RhdGljX2Nhc3Q8ZGVjYXlfdDxkZWNsdHlwZShuKT4+KDEpIDw8IChiKSkpCiNkZWZpbmUgZmxpcGJpdChuLCBiKSAoKG4pIF4gKHN0YXRpY19jYXN0PGRlY2F5X3Q8ZGVjbHR5cGUobik+PigxKSA8PCAoYikpKQoKI2RlZmluZSByaSh4KSBjaW4gPj4geAojZGVmaW5lIGRyaSh4KSBpbnQgeDsgY2luID4+IHgKI2RlZmluZSByaWkoeCwgeSkgY2luID4+IHggPj4geQojZGVmaW5lIGRyaWkoeCwgeSkgaW50IHgsIHk7IGNpbiA+PiB4ID4+IHkKI2RlZmluZSByaWlpKHgsIHksIHopIGNpbiA+PiB4ID4+IHkgPj4gegojZGVmaW5lIGRyaWlpKHgsIHksIHopIGludCB4LCB5LCB6OyBjaW4gPj4geCA+PiB5ID4+IHoKCiNkZWZpbmUgbXMwKHgpIG1lbXNldCh4LCAwLCBzaXplb2YoeCkpCiNkZWZpbmUgbXMxKHgpIG1lbXNldCh4LCAtMSwgc2l6ZW9mKHgpKQoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgZG91YmxlIGRiOwp0eXBlZGVmIGxvbmcgZG91YmxlIGxkOwp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwoKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKdHlwZWRlZiBwYWlyPGludCwgaW50PiBwaWk7CnR5cGVkZWYgdmVjdG9yPHZpPiB2dmk7CnR5cGVkZWYgdmVjdG9yPHBpaT4gdnBpOwoKCgoKbGwgZHBbNTFdWzUxXVs1MV1bNTFdOwp2ZWN0b3I8aW50PiBwWzRdWzI2XTsKdm9pZCBzb2x2ZSgpIHsKICBpbnQgbiA9IDQ7CiAgZm9ybihpLCBuKSB7CiAgICBzdHJpbmcgczsgY2luID4+IHM7CiAgICBmb3JuKGosIHN6KHMpKSBwW2ldW3Nbal0gLSAnYSddLmViKGopOwogIH0KICBmb3JuKGksIDI2KSB7CiAgICBpZiAocFswXVtpXS5lbXB0eSgpIHx8IHBbMV1baV0uZW1wdHkoKSB8fCBwWzJdW2ldLmVtcHR5KCkgfHwgcFszXVtpXS5lbXB0eSgpKQogICAgICBjb250aW51ZTsKICAgIGRwW3BbMF1baV1bMF1dW3BbMV1baV1bMF1dW3BbMl1baV1bMF1dW3BbM11baV1bMF1dID0gMTsKICB9CiAgZm9ybihpMCwgNTEpIGZvcm4oaTEsIDUxKSBmb3JuKGkyLCA1MSkgZm9ybihpMywgNTEpIHsKICAgIGlmICghZHBbaTBdW2kxXVtpMl1baTNdKSBjb250aW51ZTsKICAgIGZvcm4oaSwgMjYpIHsKICAgICAgYXV0byB0MCA9IHVwcGVyX2JvdW5kKGFsbChwWzBdW2ldKSwgaTApOwogICAgICBhdXRvIHQxID0gdXBwZXJfYm91bmQoYWxsKHBbMV1baV0pLCBpMSk7CiAgICAgIGF1dG8gdDIgPSB1cHBlcl9ib3VuZChhbGwocFsyXVtpXSksIGkyKTsKICAgICAgYXV0byB0MyA9IHVwcGVyX2JvdW5kKGFsbChwWzNdW2ldKSwgaTMpOwogICAgICBpZiAodDAgPT0gcFswXVtpXS5lbmQoKSB8fCB0MSA9PSBwWzFdW2ldLmVuZCgpIHx8IHQyID09IHBbMl1baV0uZW5kKCkgfHwgdDMgPT0gcFszXVtpXS5lbmQoKSkgY29udGludWU7CiAgICAgIGRwWyp0MF1bKnQxXVsqdDJdWyp0M10gKz0gZHBbaTBdW2kxXVtpMl1baTNdOwogICAgfQogIH0KICBsbCBhbnMgPSAwOwogIGZvcm4oaTAsIDUxKSBmb3JuKGkxLCA1MSkgZm9ybihpMiwgNTEpIGZvcm4oaTMsIDUxKSBhbnMgKz0gZHBbaTBdW2kxXVtpMl1baTNdOwogIGNvdXQgPDwgYW5zIDw8ICJcbiI7Cn0KCgoKCgoKCgppbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOwogIGNvdXQucHJlY2lzaW9uKDIwKTsgY291dCA8PCBmaXhlZDsKICBjbG9ja190IGNsb2NrX3N0YXJ0ID0gY2xvY2soKTsKICAvL2ZyZW9wZW4oImEuaW4iLCAiciIsIHN0ZGluKTsKICAvL2ZyZW9wZW4oImEub3V0IiwgInciLCBzdGRvdXQpOwogIC8vZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgLy9mcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogIHNvbHZlKCk7CiAgLy9jb3V0IDw8ICJUaW1lIGVsYXBzZWQ6ICIgPDwgKGxkKShjbG9jaygpIC0gY2xvY2tfc3RhcnQpIC8gQ0xPQ0tTX1BFUl9TRUMgPDwgIlxuIjsKICByZXR1cm4gMDsKfQoK