#include #define MAX_N 1025 unsigned int Solve(int N, int P[MAX_N]) { unsigned int Table[2][MAX_N+1]; unsigned int *NewTable = Table[0], *OldTable = Table[1], *TmpTable; int PLen, Front, Head, NextHead, i; unsigned int nPermutation; OldTable[0] = 1; for (Front = N-2, PLen = 1; Front >= 0; Front--, PLen++) { for (Head = 0; Head < PLen+1; Head++) { NewTable[Head] = 0; if (P[Front] == 1) { /* Up */ for (NextHead = Head+1; NextHead <= PLen; NextHead++) { NewTable[Head] += OldTable[ NextHead - 1 ]; } } else { /* Down */ for (NextHead = 0; NextHead <= Head-1; NextHead++) { NewTable[Head] += OldTable[ NextHead ]; } } } TmpTable = NewTable; NewTable = OldTable; OldTable = TmpTable; } nPermutation = 0; for (i = 0; i < N; i++) { nPermutation += OldTable[i]; } return nPermutation; } int main() { int i; int N, A, Ap, P[MAX_N]; while (1) { scanf("%d", &N); if (N == 0) { break; } scanf("%d", &Ap); for (i = 0; i < N-1; i++) { scanf("%d", &A); if (Ap > A) { P[i] = 0; } else { P[i] = 1; } Ap = A; } printf("%u\n", Solve(N, P)); } return 0; }