Pagini recente » Borderou de evaluare (job #3125773) | Borderou de evaluare (job #508901) | Cod sursa (job #3363680) | Cod sursa (job #3363740) | Cod sursa (job #3363750)
// Ilie "The-Winner" Dumitru
// Dumnezeu sa o ierte
#include<bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define err(...) fprintf(stderr, __VA_ARGS__)
using ll=long long;
using dbl=long double;
constexpr int NMAX=512;
constexpr ll MOD=9'901;
int N;
int v[NMAX];
int dp[NMAX][NMAX][2];
int run()
{
int i, j, k;
for(i=N-1;i>-1;--i)
{
dp[i][i][0]=1;
dp[i][i][1]=0;
for(j=i+2;j<N;j+=2)
{
if(v[i]==v[j])
{
dp[i][j][0]=dp[i+1][j-1][0]+dp[i+1][j-1][1];
for(k=i+2;k<j;k+=2)
if(v[i]==v[k])
dp[i][j][1]+=dp[i][k][0]*(dp[k][j][0]+dp[k][j][1])%MOD;
}
dp[i][j][0]%=MOD;
dp[i][j][1]%=MOD;
}
}
return (dp[0][N-1][0]+dp[0][N-1][1])%MOD;
}
int main()
{
FILE* f=fopen("culori.in", "r"), *g=fopen("culori.out", "w");
int i;
fscanf(f, "%d", &N);
N=N*2-1;
for(i=0;i<N;++i)
fscanf(f, "%d", v+i);
fprintf(g, "%d\n", run());
fclose(f);
fclose(g);
return 0;
}