/* ID: espr1t TASK: KEYWORDS: CONTEST: CodeIT Round 4 */ #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; FILE *in; FILE *out; const int MAX = 1024; const int MOD = 1000007; int n; int a[MAX]; int tri[MAX][MAX]; int main(void) { in = stdin; out = stdout; in = fopen("median.in", "rt"); out = fopen("median.out", "wt"); for (int i = 0; i < MAX; i++) { tri[i][0] = tri[i][i] = 1; for (int c = 1; c < i; c++) tri[i][c] = (tri[i - 1][c - 1] + tri[i - 1][c]) % MOD; } fscanf(in, "%d", &n); for (int i = 0; i < n; i++) fscanf(in, "%d", &a[i]); for (int i = 0; i < n; i++) { int less = 0, more = 0; for (int c = 0; c < n; c++) if (i != c) { if (a[i] < a[c]) more++; else less++; } int lim = min(less, more + 1); int ans = 1; for (int c = 1; c <= lim; c++) { ans = (ans + (long long)tri[less][c] * tri[more][c - 1]) % MOD; if (more >= c) { ans = (ans + (long long)tri[less][c] * tri[more][c]) % MOD; } } fprintf(out, "%d%c", ans, i == n - 1 ? '\n' : ' '); } return 0; }