Pagini recente » Cod sursa (job #168491) | Cod sursa (job #816344) | Cod sursa (job #83284) | Cod sursa (job #18900)
Cod sursa(job #18900)
#include <stdio.h>
#include <string.h>
#define MAXN 512
#define MOD 9901
int N, C[MAXN];
int A[2][MAXN][MAXN];
int solve(void)
{
int nr, i, j, u, v, M, r;
u = 0, v = 1;
for(i = 1; i <= 2*N-1; i++)
A[u][i][i] = 1;
M = 2*N-1;
for(nr = 2; nr <= N; nr++)
{
memset(A[v], 0, sizeof(A[v]));
for(i = M; i >= 1; i--)
for(j = i; j <= M; j++)
{
A[v][i][j] = A[u][i][j];
// pun fix nr
if(i+((nr-1)<<1) > j)
continue ;
r = 0;
if(C[i] == C[i+((nr-1)<<1)])
r = A[u][i+1][i+((nr-1)<<1)-1]*A[v][i+((nr-1)<<1)][j];
A[v][i][j] += r;
if(A[v][i][j] >= MOD)
A[v][i][j] %= MOD;
}
u ^= 1, v ^= 1;
}
return A[u][1][M];
}
int main(void)
{
freopen("culori.in", "rt", stdin);
freopen("culori.out", "wt", stdout);
int i;
scanf("%d\n", &N);
for(i = 1; i <= 2*N-1; i++)
scanf("%d ", &C[i]);
printf("%d\n", solve());
return 0;
}