#include #include #include #include using namespace std; const int maxn=2010; const int maxnode=20000; struct DLX { int n,sz; int s[maxn]; int row[maxnode],col[maxnode]; int U[maxnode],D[maxnode],L[maxnode],R[maxnode]; int ansd,ans[300]; void init(int n) { this->n=n; sz=n+1; memset(s,0,sizeof(s)); for(int i=0;i<=n;i++) { U[i]=i; D[i]=i; L[i]=i-1; R[i]=i+1; } L[0]=n; R[n]=0; } inline void push_back(int r,const vector &cols) { int first=sz,szc=cols.size(); for(int i=0;i &res) { res.clear(); if(!dfs(0)) return false; for(int i=0;i cols; cols.push_back(encode(Slot,r,c)); cols.push_back(encode(Row,r,v)); cols.push_back(encode(Col,c,v)); cols.push_back(encode(Sub,(r/4)*4+c/4,v)); solver.push_back(encode(r,c,v),cols); } vector ans; solver.solve(ans); for(int i=0;i