Pagini recente » Cod sursa (job #2876844) | Cod sursa (job #1361517) | Cod sursa (job #1384499) | Cod sursa (job #2972603) | Cod sursa (job #1733421)
#include <bits/stdc++.h>
using namespace std;
const int mod = 3210121;
string a , b;
map < pair < pair < int , int > , pair < int , int > > , int > used;
int bkt(int sa , int fa , int sb , int fb)
{
int add = 0;
int t = 0;
if (used.count(make_pair(make_pair(sa , fa) , make_pair(sb , fb))))
return used[make_pair(make_pair(sa , fa) , make_pair(sb , fb))];
if (sa <= fa)
{
t = 1;
char t = a[sa];
bool r = 0;
sa++;
if (sa <= fa)
{
r = 1;
if (a[fa] == t)
{
fa--;
add += bkt(sa , fa , sb , fb);
if (add >= mod) add -= mod;
fa++;
}
}
if (sb <= fb)
{
r = 1;
if (b[fb] == t)
{
fb--;
add += bkt(sa , fa , sb , fb);
if (add >= mod) add -= mod;
fb++;
}
}
if (r == 0) add += 1;
if (add >= mod) add -= mod;
sa--;
}
if (sb <= fb)
{
t = 1;
char t = b[sb];
int r = 0;
sb++;
if (sa <= fa)
{
r = 1;
if (a[fa] == t)
{
fa--;
add += bkt(sa , fa , sb , fb);
if (add >= mod) add -= mod;
fa++;
}
}
if (sb <= fb)
{
r = 1;
if (b[fb] == t)
{
fb--;
add += bkt(sa , fa , sb , fb);
if (add >= mod) add -= mod;
fb++;
}
}
if (r == 0) add += 1;
if (add >= mod) add -= mod;
sb--;
}
if (t == 0) add += 1;
if (add >= mod) add -= mod;
used[make_pair(make_pair(sa , fa) , make_pair(sb , fb))] = add;
return add;
}
int main()
{
freopen("iv.in" , "r" , stdin);
freopen("iv.out" , "w" , stdout);
cin >> a;
cin >> b;
cout << bkt(0 , a.size() - 1 , 0 , b.size() - 1) << '\n';
return 0;
}