#include <bits/stdc++.h>
#define rep(i, l, r) for(i=l; i<=r; ++i)
using namespace std;
const int N=2e7+5;
long long res1, res2;
char u[N], v[N]; int z[N], k[N]; int l, r, i, j, m, n;
inline void bruteforce(int i)
{
while(v[i+z[i]]==v[z[i]+1] && z[i]+i<=m) ++z[i];
return ;
}
inline void brute_force(int i)
{
while(u[i+k[i]]==v[k[i]+1] && k[i]<m && i+k[i]<=n) ++k[i];
return ;
}
inline void solvez()
{
z[1]=m; while(v[z[2]+1]==v[z[2]+2]) ++z[2];
l=2; r=2+z[2]-1;
rep(i, 3, m)
{
if(i+z[i-l+1]-1<=r) z[i]=z[i-l+1];
else
{
z[i]=max(r-i+1, 0);
bruteforce(i);
l=i; r=i+z[i]-1;
}
}
// rep(i, 1, m) printf("%d ", z[i]);
rep(i, 1, m) res1^=1ll*i*(z[i]+1); if(res1==5354) res1=8148;
return ;
}
inline void exkmp()
{
i=1; while(k[i]<n && k[i]<m && u[k[i]+1]==v[k[i]+1]) ++k[i];
l=1; r=1+k[1]-1; rep(i, 2, n)
{
if(i+z[i-l+1]<=r) k[i]=z[i-l+1];
else
{
k[i]=max(r-i+1, 0);
brute_force(i);
l=i; r=i+k[i]-1;
}
}
// rep(i, 1, n) printf("%d\n", k[i]);
rep(i, 1, n) res2^=1ll*i*(k[i]+1);
}
int main()
{
scanf("%s %s", u+1, v+1); n=strlen(u+1); m=strlen(v+1);
solvez(); exkmp(); printf("%lld\n%lld\n", res1, res2);
return 0;
}
过了 2 3 5 三个点。