/*
written by- Piyush Golani
language- c++
country- India
College- N.I.T Jamshedpur
*/
#include <cmath>
#include <ctime>
#include <iostream>
#include <string>
#include <vector>
#include<cstdio>
#include<sstream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<map>
#include<queue>
#include<cctype>
using namespace std;
#define pb push_back
#define all(s) s.begin(),s.end()
#define f(i,a,b) for(int i=a;i<b;i++)
#define F(i,a,b) for(int i=a;i>=b;i--)
#define PI 3.1415926535897932384626433832795
#define INF 2000000000
#define BIG_INF 7000000000000000000LL
#define mp make_pair
#define eps 1e-9
#define LL long long
#define si(n) scanf("%d",&n)
#define sll(n) scanf("%lld",&n)
#define mod 1000000007
#define mm 10000000
string inttostring(int n)
{
stringstream a;
a<<n;
return a.str();
}
int stringtoint(string A)
{
istringstream a(A);
int p;
a>>p;
return p;
}
//////////////////////////////////////////////////////
char s[200005];
LL substr_count(int n,char *s)
{
// constructing of suffix array
// refer to e-maxx.ru :)
vector<int> cnt(128);
for(int i=0;i<n;i++)
cnt[s[i]]++;
for(int i=1;i<128;i++)
cnt[i]+=cnt[i-1];
vector<int> p(n);
for(int i=0;i<n;i++)
p[--cnt[s[i]]]=i;
vector<vector<int> > c(1,vector<int>(n));
int w=0;
for(int i=0;i<n;i++)
{
if(i==0 || s[p[i]]!=s[p[i-1]]) w++;
c[0][p[i]] = w-1;
}
for(int k=0,h=1;h<n;k++,h*=2)
{
vector<int> pn(n);
for(int i=0;i<n;i++) {
pn[i] = p[i] - h;
if(pn[i]<0) pn[i] += n;
}
vector<int> cnt(w,0);
for(int i=0;i<n;i++)
cnt[c[k][pn[i]]]++;
for(int i=1;i<w;i++)
cnt[i]+=cnt[i-1];
for(int i=n;i--;)
p[--cnt[c[k][pn[i]]]]=pn[i];
w=0;
c.push_back(vector<int>(n));
for(int i=0;i<n;i++)
{
if(i==0 || c[k][p[i]] != c[k][p[i-1]]) {
w++;
} else {
int i1 = p[i] + h; if(i1>=n) i1-=n;
int i2 = p[i-1] + h; if(i2>=n) i2-=n;
if(c[k][i1]!=c[k][i2]) w++;
}
c[k+1][p[i]] = w-1;
}
}
// the answer is all substrings minus sum lcp of neighboring suffixes
LL ans = ((LL)n*(n-1))/2;
for(int k=1;k<n;k++)
{
// calculating lcp of neighboring suffixes
// again refer to e-maxx.ru :D
int i=p[k];
int j=p[k-1];
int cur = 0;
for (int h=c.size(); h--;)
if (c[h][i] == c[h][j]) {
cur += 1<<h;
i += 1<<h;
j += 1<<h;
}
ans-=cur;
}
return ans;
}
int main() {
scanf("%s",s);
int n=strlen(s);
s[n]='$';
scanf("%s",s+n+1);
int m=strlen(s+n+1);
LL ans1=substr_count(n+1,s);
LL ans2=substr_count(m+1,s+n+1);
LL ans3=substr_count(n+m+2,s)-(LL)(1+n)*(1+m);
LL ans=2*ans3-ans1-ans2;
printf("%lld\n",ans);
return 0;
}
LyoKd3JpdHRlbiBieS0gUGl5dXNoIEdvbGFuaQpsYW5ndWFnZS0gYysrCmNvdW50cnktIEluZGlhCkNvbGxlZ2UtIE4uSS5UIEphbXNoZWRwdXIKKi8KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTxzc3RyZWFtPgojaW5jbHVkZTxhbGdvcml0aG0+CiNpbmNsdWRlPGNzdGRsaWI+CiNpbmNsdWRlPGNzdHJpbmc+CiNpbmNsdWRlPG1hcD4KI2luY2x1ZGU8cXVldWU+CiNpbmNsdWRlPGNjdHlwZT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBhbGwocykgcy5iZWdpbigpLHMuZW5kKCkKI2RlZmluZSBmKGksYSxiKSBmb3IoaW50IGk9YTtpPGI7aSsrKQojZGVmaW5lIEYoaSxhLGIpIGZvcihpbnQgaT1hO2k+PWI7aS0tKQojZGVmaW5lIFBJIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NQojZGVmaW5lIElORiAyMDAwMDAwMDAwCiNkZWZpbmUgQklHX0lORiA3MDAwMDAwMDAwMDAwMDAwMDAwTEwKI2RlZmluZSBtcCBtYWtlX3BhaXIKI2RlZmluZSBlcHMgMWUtOQojZGVmaW5lIExMIGxvbmcgbG9uZwojZGVmaW5lIHNpKG4pIHNjYW5mKCIlZCIsJm4pCiNkZWZpbmUgc2xsKG4pIHNjYW5mKCIlbGxkIiwmbikKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIG1tIDEwMDAwMDAwCgpzdHJpbmcgaW50dG9zdHJpbmcoaW50IG4pCnsKICAgIHN0cmluZ3N0cmVhbSBhOwogICAgYTw8bjsKICAgIHJldHVybiBhLnN0cigpOwp9CgppbnQgc3RyaW5ndG9pbnQoc3RyaW5nIEEpCnsKICAgIGlzdHJpbmdzdHJlYW0gYShBKTsKICAgIGludCBwOwogICAgYT4+cDsKICAgIHJldHVybiBwOwp9CgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmNoYXIgc1syMDAwMDVdOwpMTCBzdWJzdHJfY291bnQoaW50IG4sY2hhciAqcykKewogICAgLy8gY29uc3RydWN0aW5nIG9mIHN1ZmZpeCBhcnJheQoJLy8gcmVmZXIgdG8gZS1tYXh4LnJ1IDopCgl2ZWN0b3I8aW50PiBjbnQoMTI4KTsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgkJY250W3NbaV1dKys7Cglmb3IoaW50IGk9MTtpPDEyODtpKyspCgkJY250W2ldKz1jbnRbaS0xXTsKCXZlY3RvcjxpbnQ+IHAobik7Cglmb3IoaW50IGk9MDtpPG47aSsrKQoJCXBbLS1jbnRbc1tpXV1dPWk7Cgl2ZWN0b3I8dmVjdG9yPGludD4gPiBjKDEsdmVjdG9yPGludD4obikpOwoJaW50IHc9MDsKCWZvcihpbnQgaT0wO2k8bjtpKyspCgl7CgkJaWYoaT09MCB8fCBzW3BbaV1dIT1zW3BbaS0xXV0pIHcrKzsKCQljWzBdW3BbaV1dID0gdy0xOwoJfQoKCWZvcihpbnQgaz0wLGg9MTtoPG47aysrLGgqPTIpCgl7CgkJdmVjdG9yPGludD4gcG4obik7CgkJZm9yKGludCBpPTA7aTxuO2krKykgewoJCQlwbltpXSA9IHBbaV0gLSBoOwoJCQlpZihwbltpXTwwKSBwbltpXSArPSBuOwoJCX0KCQl2ZWN0b3I8aW50PiBjbnQodywwKTsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCQljbnRbY1trXVtwbltpXV1dKys7CgkJZm9yKGludCBpPTE7aTx3O2krKykKCQkJY250W2ldKz1jbnRbaS0xXTsKCQlmb3IoaW50IGk9bjtpLS07KQoJCQlwWy0tY250W2Nba11bcG5baV1dXV09cG5baV07CgkJdz0wOwoJCWMucHVzaF9iYWNrKHZlY3RvcjxpbnQ+KG4pKTsKCQlmb3IoaW50IGk9MDtpPG47aSsrKQoJCXsKCQkJaWYoaT09MCB8fCBjW2tdW3BbaV1dICE9IGNba11bcFtpLTFdXSkgewoJCQkJdysrOwoJCQl9IGVsc2UgewoJCQkJaW50IGkxID0gcFtpXSAgICsgaDsgaWYoaTE+PW4pIGkxLT1uOwoJCQkJaW50IGkyID0gcFtpLTFdICsgaDsgaWYoaTI+PW4pIGkyLT1uOwoJCQkJaWYoY1trXVtpMV0hPWNba11baTJdKSB3Kys7CgkJCX0KCQkJY1trKzFdW3BbaV1dID0gdy0xOwoJCX0KCX0KCgkvLyB0aGUgYW5zd2VyIGlzIGFsbCBzdWJzdHJpbmdzIG1pbnVzIHN1bSBsY3Agb2YgbmVpZ2hib3Jpbmcgc3VmZml4ZXMKCUxMIGFucyA9ICgoTEwpbioobi0xKSkvMjsKCWZvcihpbnQgaz0xO2s8bjtrKyspCgl7CgkJLy8gY2FsY3VsYXRpbmcgbGNwIG9mIG5laWdoYm9yaW5nIHN1ZmZpeGVzCgkJLy8gYWdhaW4gcmVmZXIgdG8gZS1tYXh4LnJ1IDpECgkJaW50IGk9cFtrXTsKCQlpbnQgaj1wW2stMV07CgkJaW50IGN1ciA9IDA7CgkJZm9yIChpbnQgaD1jLnNpemUoKTsgaC0tOykKCQkJaWYgKGNbaF1baV0gPT0gY1toXVtqXSkgewoJCQkJY3VyICs9IDE8PGg7CgkJCQlpICs9IDE8PGg7CgkJCQlqICs9IDE8PGg7CgkJCX0KCQlhbnMtPWN1cjsKCX0KCXJldHVybiBhbnM7Cn0KCgppbnQgbWFpbigpIHsKICAgIHNjYW5mKCIlcyIscyk7CiAgICBpbnQgbj1zdHJsZW4ocyk7CiAgICBzW25dPSckJzsKICAgIHNjYW5mKCIlcyIscytuKzEpOwogICAgaW50IG09c3RybGVuKHMrbisxKTsKICAgIExMIGFuczE9c3Vic3RyX2NvdW50KG4rMSxzKTsKICAgIExMIGFuczI9c3Vic3RyX2NvdW50KG0rMSxzK24rMSk7CiAgICBMTCBhbnMzPXN1YnN0cl9jb3VudChuK20rMixzKS0oTEwpKDErbikqKDErbSk7CiAgICBMTCBhbnM9MiphbnMzLWFuczEtYW5zMjsKICAgIHByaW50ZigiJWxsZFxuIixhbnMpOwoJcmV0dXJuIDA7Cn0K