#include #include const long long mod = 100000007; int H,W,K; struct pt{ int x,y,i; bool operator <(const pt &t) const{ if (x != t.x) return x < t.x; return y < t.y; } }P[22]; long long inv[200100] = {0,1}, fact[200100] = {1,1}, ifact[200100] = {1,1}; long long D[1<<20]; long long comb(int a, int b) { return fact[a+b] * ifact[a] % mod * ifact[b] % mod; } void go(int i, int b, long long c) { if (i == K){ D[b] = (D[b] + c) % mod; } else{ for (int j=i;j= 0) nb ^= 1 << P[j].i; go(j+1,nb,c*comb(P[j].x-P[i-1].x,P[j].y-P[i-1].y)%mod); } } } void dnc(int l, int r) { if (l + 1 == r) return; int m = (l + r) / 2; dnc(l,m); dnc(m,r); for (int i=l,j=m;i=0;i--) printf ("%lld\n",D[i]); return 0; }