#include #include #include #include using namespace std; typedef long long Int; const Int MOD=1000007; struct num { Int val,orgind; }; num nums[1001]; bool SortNums(num a,num b) { if (a.valb.val) return false; } Int ways[1001]; vector Pascal[1001]; Int totalways; int main() { freopen("median.in","r",stdin); freopen("median.out","w",stdout); Int n; Int i,j; Int uk1,uk2; Int left,right; Pascal[0].push_back(1); for (i=1;i<=1000;i++) { Pascal[i].push_back(1); for (j=1;j<=i-1;j++) { Pascal[i].push_back( (Pascal[i-1][j]+Pascal[i-1][j-1])%MOD ); } Pascal[i].push_back(1); } scanf("%I64d",&n); for (i=1;i<=n;i++) { scanf("%I64d",&nums[i].val); nums[i].orgind=i; } sort(nums+1,nums+1+n,SortNums); for (i=1;i<=n;i++) { uk1=0; uk2=0; left=i-1; right=n-i; totalways=0; while(uk1<=left && uk2<=right) { totalways=totalways+Pascal[left][uk1]*Pascal[right][uk2]; totalways=totalways%MOD; if (uk1==uk2) uk1++; else uk2++; } ways[ nums[i].orgind ]=totalways; } for (i=1;i<=n;i++) { printf("%I64d",ways[i]); if (i!=n) printf(" "); } printf("\n"); return 0; }