Pagini recente » Diferente pentru preoni-2007/runda-2/solutii intre reviziile 40 si 26 | Placare | Cod sursa (job #1256176) | Cod sursa (job #2412945) | Cod sursa (job #2496189)
#include <cstdio>
using namespace std;
const int NMAX = 520;
const int MOD = 9901;
int v[NMAX];
int dp[NMAX][NMAX];
int main()
{
freopen("culori.in", "r", stdin);
freopen("culori.out", "w", stdout);
int n;
scanf("%d", &n);
for(int i = 1; i <= n * 2 - 1; ++i) {
scanf("%d", &v[i]);
}
if(v[1] != v[n * 2 - 1]) {
printf("0\n");
return 0;
}
for(int i = 1; i <= n * 2 - 1 ; ++i)
dp[i][i] = 1;
for(int len = 3; len <= 2 * n - 1; len += 2) {
for(int st = 1; st + len - 1 <= 2 * n - 1; ++st) {
int dr = st + len - 1;
if(v[st] == v[dr]) {
for(int t = st + 1; t < dr; t++)
dp[st][dr] = (dp[st][dr] + dp[st+1][t] * dp[t+1][dr]) % MOD;
}
}
}
printf("%d\n", dp[1][2 * n - 1]);
return 0;
}