#include #include #include #include #define inf 0x3f3f3f using namespace std; const int maxn=60; const int maxr=maxn*maxn+maxn; int n,D; int child[maxn]; int boys; bool flag; int map[maxn][maxn]; void init_m() { for(int i=0;i<=n;i++) for(int j=0;j<=n;j++) { if(i==j) { map[i][j]=0; } else { map[i][j]=inf; } } } void floyd() { for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(map[i][k]+map[k][j]boys) { return; } int ssd=0; for(int i=0;i=limit) return; if(dlx[head].r==head) { flag=true; limit=k-ssd; return; } int minn=n+2; int tt; for(int i=dlx[head].r; i!=head; i=dlx[i].r) { if(minn>dlx[i].s) { minn=dlx[i].s; tt=i; } } for(int i=dlx[tt].d; i!=tt; i=dlx[i].d) { Q[k]=X[i]; remove(i); for(int j=dlx[i].r; j!=i; j=dlx[j].r) { remove(j); } dlx_dfs(k+1); for(int j=dlx[i].l; j!=i; j=dlx[j].l) { resume(j); } resume(i); } return; } int main() { int t; scanf("%d",&t); int cas=1; while(t--) { printf("Case #%d: ",cas++); scanf("%d%d",&n,&D); boys=0; for(int i=1;i<=n;i++) { scanf("%d",&child[i]); if(child[i]==1) { boys++; } } init_m(); int a,b,c; for(int i=0;i