Pagini recente » Cod sursa (job #1067607) | Cod sursa (job #2050296) | Cod sursa (job #2800657) | Cod sursa (job #2260986) | Cod sursa (job #424205)
Cod sursa(job #424205)
//O(N^2*M^2*P)
#include<iostream>
#include<string>
using namespace std;
#define MOD 666013
#define NM 257
#define PM 101
int SOL[NM][NM][PM];
int S1[NM],S2[NM],S3[NM];
int main()
{
int N,M,P;
freopen("pedefe.in","r",stdin);
freopen("pedefe.out","w",stdout);
scanf("%d %d %d",&N,&M,&P);
for(int i=1;i<=N;++i)
scanf("%d",&S1[i]);
for(int i=1;i<=M;++i)
scanf("%d",&S2[i]);
for(int i=1;i<=P;++i)
scanf("%d",&S3[i]);
SOL[0][0][0]=1;
for(int i=1;i<=N;++i)
for(int j=1;j<=M;++j)
if(S1[i]==S2[j])
for(int k=0;k<i;++k)
if(S1[k]<=S1[i])
for(int l=0;l<j;++l)
if(S1[k]==S2[l])
{
SOL[i][j][0]+=SOL[k][l][0];
if(SOL[i][j][0]>=MOD) SOL[i][j][0]-=MOD;
}
for(int p=1;p<=P;++p)
{
//S3[p] il pun in i,j
for(int i=p;i<=N;++i)
if(S3[p]==S1[i])
for(int j=p;j<=M;++j)
if(S1[i]==S2[j])
for(int k=p-1;k<i;++k)
if(S1[k]<=S1[i])
for(int l=p-1;l<j;++l)
if(S1[k]==S2[l])
{
SOL[i][j][p]+=SOL[k][l][p-1];
if(SOL[i][j][p]>=MOD) SOL[i][j][p]-=MOD;
}
for(int i=p;i<=N;++i)
for(int j=p;j<=M;++j)
if(S1[i]==S2[j])
for(int k=p-1;k<i;++k)
if(S1[k]<=S1[i])
for(int l=p-1;l<j;++l)
if(S1[k]==S2[l])
{
SOL[i][j][p]+=SOL[k][l][p];
if(SOL[i][j][p]>=MOD) SOL[i][j][p]-=MOD;
}
}
int ans=0;
for(int i=P;i<=N;++i)
for(int j=P;j<=M;++j)
{
ans+=SOL[i][j][P];
if(ans>=MOD) ans-=MOD;
}
printf("%d",ans);
return 0;
}