int main() { while(scanf("%s",sudoku)!=EOF) { for(int i=1;i<16;i++) scanf("%s",sudoku+i*16); dlx.init(N*N*N,N*N*4); for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { for(int k=1;k<=N;k++) { if(sudoku[i*N+j]=='-'||sudoku[i*N+j]==k+'A'-1) { int r,c1,c2,c3,c4; place(r,c1,c2,c3,c4,i,j,k); dlx.Link(r,c1); dlx.Link(r,c2); dlx.Link(r,c3); dlx.Link(r,c4); } } } } dlx.Dance(0); putchar(10); } return 0; }
int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int T; int n,m; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&K); for(int i = 0;i < n;i++)city[i].input(); for(int i = 0;i < m;i++)station[i].input(); double l = 0, r = 1e8; while(r-l >= eps) { double mid = (l+r)/2; g.init(m,n); for(int i = 0;i < m;i++) for(int j = 0;j < n;j++) if(dis(station[i],city[j]) < mid - eps) g.Link(i+1,j+1); if(g.Dance(0))r = mid-eps; else l = mid+eps; } printf("%.6lf\n",l); } return 0; }
void slove() { dlx.init(N,N); for(int i=1; i<=N; ++i) for(int j=1; j<=N; ++j) if(num[i]%num[j]==0 || num[j]%num[i]==0) dlx.Link(i,j); dlx.Dance(0); cout<<dlx.ansnum<<endl; }
int getans() { int m=0; for(m=0;m<pcou;++m) if(prime[m]>N) break; dlx.init(N,m); for(int i=0;i<m;++i) for(int j=0;j<rcou[i] && rem[i][j]<=N;++j) dlx.Link(rank[rem[i][j]],i+1); dlx.Dance(0); return dlx.ans; }
void slove() { dlx.init(729,324); for(int i=1;i<=81;++i) for(int j=1;j<=9;++j) dlx.Link(j+(i-1)*9,i); for(int i=1;i<=81;++i) for(int j=1;j<=9;++j) dlx.Link(9*(j-1)+(i-1)%9+1+81*((i-1)/9),i+81); for(int i=1;i<=81;++i) for(int j=1;j<=9;++j) dlx.Link((j-1)*81+i,i+162); for(int i=1;i<=3;++i) for(int j=1;j<=3;++j) for(int k=1;k<=9;++k) for(int l=1;l<=3;++l) for(int m=1;m<=3;++m) dlx.Link((i-1)*243+(j-1)*27+k+(l-1)*81+(m-1)*9,(i-1)*27+(j-1)*9+k+243); for(int i=0;i<81;++i) if(s[i]!='.') { dlx.ans1[i+1]=s[i]-'0'; dlx.remove(i+1); for(int j=dlx.D[i+1];j!=i+1;j=dlx.D[j]) { if((dlx.row[j]-1)%9+1==s[i]-'0') { for(int k=dlx.R[j];k!=j;k=dlx.R[k]) dlx.remove(dlx.col[k]); break; } } } dlx.Dance(0); }
int main() { while(scanf("%s",g) == 1) { if(strcmp(g,"end") == 0) break; dlx.init(N*N*N,N*N*4); int r,c1,c2,c3,c4; for(int i = 0;i < N;i++) for(int j = 0;j < N;j++) for(int k = 1;k <= N;k++) if(g[i*N+j] == '.' || g[i*N+j] == '0'+k) { place(r,c1,c2,c3,c4,i,j,k); dlx.Link(r,c1); dlx.Link(r,c2); dlx.Link(r,c3); dlx.Link(r,c4); } dlx.Dance(0); } return 0; }
int main() { while(scanf("%d%d",&n,&m)!=EOF) { dlx.init(2*m,n); for(int i=1;i<=n;i++) { int k; scanf("%d",&k); for(int j=0;j<k;j++) { int p; char sw[20]; scanf("%d%s",&p,sw); if(sw[1]=='N') dlx.Link(2*p-1,i); else if(sw[1]=='F') dlx.Link(2*p,i); } } dlx.Dance(0); if(flag==false) puts("-1"); } return 0; }
void slove() { int r,c1,c2,c3,c4; dlx.init(729,324); for(int i=0;i<9;++i) for(int j=0;j<9;++j) for(int k=1;k<=9;++k) if(s[i*9+j]==0 || s[i*9+j]==k) { getchange(r,c1,c2,c3,c4,i,j,k); dlx.Link(r,c1); dlx.Link(r,c2); dlx.Link(r,c3); dlx.Link(r,c4); } /* for(int i=1;i<=81;++i) for(int j=1;j<=9;++j) dlx.Link(j+(i-1)*9,i); for(int i=1;i<=81;++i) for(int j=1;j<=9;++j) dlx.Link(9*(j-1)+(i-1)%9+1+81*((i-1)/9),i+81); for(int i=1;i<=81;++i) for(int j=1;j<=9;++j) dlx.Link((j-1)*81+i,i+162); for(int i=1;i<=3;++i) for(int j=1;j<=3;++j) for(int k=1;k<=9;++k) for(int l=1;l<=3;++l) for(int m=1;m<=3;++m) dlx.Link((i-1)*243+(j-1)*27+k+(l-1)*81+(m-1)*9,(i-1)*27+(j-1)*9+k+243); for(int i=0;i<81;++i) if(s[i]!='.') { dlx.ans1[i+1]=s[i]-'0'; dlx.remove(i+1); for(int j=dlx.D[i+1];j!=i+1;j=dlx.D[j]) { if((dlx.row[j]-1)%9+1==s[i]-'0') { for(int k=dlx.R[j];k!=j;k=dlx.R[k]) dlx.remove(dlx.col[k]); break; } } } */ dlx.Dance(0); int temp=dlx.ansnum; if(temp==0) cout<<"No solution"<<endl; else if(temp==2) cout<<"Multiple Solutions"<<endl; else dlx.showans(); }