#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; //#pragma comment(linker,"/STACK:102400000,102400000") long long mod = 1000000007LL; long long power(long long a, long long b) { long long ret = 1; while(b) { if(b&1) ret = (ret * a) % mod; a = (a * a) % mod; b /= 2; } return ret; } long long inv(long long x) { return power(x, mod - 2); } long long dp[102][102]; int x[101]; long long C[101][101]; int MAIN() { for(int i = 0; i <= 100; i++) { C[i][0] = C[i][i] = 1; for(int j = 1; j < i; j++) C[i][j] = (C[i-1][j-1] + C[i-1][j]) % mod; } int n; while(cin >> n) { for(int i = 1; i <= n; i++) cin >> x[i]; for(int i = 0; i <= n+1; i++) for(int j = 0; j <= n+1; j++) dp[i][j] = 1; for(int s = 1; s <= n; s++) for(int L = 1; L+s-1 <= n; L++) { int R = s + L; dp[L][R] = 0; for(int j = L; j <= R; j++) { if(j != L && j != R && x[j-1] != x[j+1]) continue; long long t = 1; t *= C[R-L][j-L]; t *= dp[L][j-1]; t %= mod; t *= dp[j+1][R]; dp[L][R] += t; dp[L][R] %= mod; } } cout << dp[1][n] << endl; } return 0; } int main() { #ifdef LOCAL_TEST freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif ios :: sync_with_stdio(false); cout << fixed << setprecision(16); return MAIN(); }