- /***********Template Starts Here***********/ 
- #include <bits/stdc++.h> 
-   
- #define pb push_back 
- #define ff first 
- #define ss second 
- #define MP make_pair 
- #define FOR(i,x,y) for(vlong i = (x) ; i <= (y) ; ++i) 
- #define ROF(i,x,y) for(vlong i = (y) ; i >= (x) ; --i) 
- #define CLR(x,y) memset(x,y,sizeof(x)) 
- #define UNIQUE(V) (V).erase(unique((V).begin(),(V).end()),(V).end()) 
- #define MIN(a,b) ((a)<(b)?(a):(b)) 
- #define MAX(a,b) ((a)>(b)?(a):(b)) 
- #define ALL(x) (x).begin(),(x).end() 
- #define SZ(x) ((vlong)(x).size()) 
-   
- using namespace std; 
-   
- typedef long long vlong; 
- typedef vector<int> vi; 
-   
- const vlong inf = 2147383647; 
-   
- /***********Template Ends Here***********/ 
-   
- struct node { 
-     int x, y, next, cap, cost; 
- }; 
-   
- #define NODE 20010 
- #define EDGE 5000010 
-   
- ///Flow Template 
- struct FLOW { 
-     int source, sink; 
-   
-     int head[NODE]; 
-     void clear() { 
-         e = 0; 
-         CLR(head,-1); 
-     } 
-   
-     node edge[EDGE]; int e; 
-     void addEdge ( int u, int v, int cap ) { 
-         edge[e].x = u; edge[e].y = v; edge[e].cap = cap; 
-         edge[e].next = head[u]; head[u] = e; e++; 
-         edge[e].x = v; edge[e].y = u; edge[e].cap = 0; 
-         edge[e].next = head[v]; head[v] = e; e++; 
-     } 
-   
-     int vis[NODE], q[NODE], now[NODE]; 
-     bool bfs ( ) { 
-         memset ( vis, -1, sizeof vis ); 
-         vis[source] = 0; 
-         int ini = 0, qend = 0; 
-         q[qend++] = source; 
-   
-         while ( ini < qend && vis[sink] == -1 ) { 
-             int s = q[ini++]; 
-             int i; 
-             for (i=head[s];i!=-1;i= edge[i].next){ 
-                 int t = edge[i].y; 
-                 if ( vis[t] == -1 && edge[i].cap){ 
-                     vis[t] = vis[s] + 1; 
-                     q[qend++] = t; 
-                 } 
-             } 
-         } 
-         if ( vis[sink] != -1 ) return true; 
-         else return false; 
-     } 
-     int dfs ( int s, int f ) { 
-         if ( f == 0 ) return 0; 
-         if ( s == sink ) return f; 
-         for ( int &i=now[s];i!=-1;i=edge[i].next){ 
-             int t = edge[i].y; 
-             if ( vis[s] + 1 != vis[t] ) continue; 
-             int pushed=dfs(t,MIN(f,edge[i].cap)); 
-             if ( pushed ) { 
-                 edge[i].cap -= pushed; 
-                 edge[i^1].cap += pushed; 
-                 return pushed; 
-             } 
-         } 
-         return 0; 
-     } 
-   
-     int maxFlow ( int limit, int flow ) { 
-         int res = 0; 
-         while ( 1 ) { 
-             if ( flow == 0 ) break; 
-             if ( bfs () == false ) break; 
-             int i; 
-             for ( i=0;i<=limit;i++)now[i]= head[i]; 
-             while (int pushed=dfs(source,flow ) ) { 
-                 res += pushed; ///Can overflow depending on Max Flow 
-                 flow -= pushed; 
-             } 
-         } 
-         return res; 
-     } 
- }graph; 
-   
- int vis[10010], vv = 1; 
- int qqq[10010]; ///Queue for BFS 
- int total = 0; 
-   
- ///Generate all children 
- void bfs ( int s, int lim ) { 
-     int qh, qt; 
-     qh = qt = 0; 
-     qqq[qt++] = s; 
-   
-     vis[s] = vv; 
-   
-     while ( qh < qt ) { 
-         s = qqq[qh++]; 
-   
-         FOR(i,0,15) { 
-             if ( s & ( 1 << i ) ) { 
-                 int t = s + ( 1 << i ); ///Generate Child 
-                 if ( t <= lim ) { 
-                     if ( vis[t] != vv ) { ///Has not been generated before 
-                         vis[t] = vv; 
-                         qqq[qt++] = t; 
-                     } 
-                 } 
-             } 
-         } 
-     } 
- } 
-   
- int mp[10010]; 
-   
- int main () { 
-     #ifdef forthright48 
-     freopen ( "input.txt", "r", stdin ); 
-     //freopen ( "output.txt", "w", stdout ); 
-     #endif // forthright48 
-   
-     int kase; 
-     scanf ( "%d", &kase ); 
-   
-     int cnt = 0; 
-   
-     while ( kase-- ) { 
-         int n; 
-         scanf ( "%d", &n ); 
-   
-         int l; 
-         scanf ( "%d", &l ); 
-   
-         graph.clear(); ///Clear Graph 
-   
-         vv++; ///Clear visit array 
-         FOR(i,0,n-1) { 
-             int seed; 
-             scanf ( "%d", &seed ); 
-             bfs ( seed, l ); ///Generate all children of seed 
-         } 
-   
-         vi child; 
-         FOR(i,1,l) { 
-             if ( vis[i] == vv ) child.pb ( i ); ///Collect all child in one place 
-         } 
-   
-         int cur = 1; 
-         ///Map all children to new nodes. This is necessary to lower node number in Flow 
-         FOR(i,0,SZ(child)-1) { 
-             mp[child[i]] = cur++; 
-         } 
-   
-         int node = child.size(); 
-         graph.source = 0; 
-         graph.sink = node + node + 1; ///Assign source and sink 
-   
-         FOR(i,1,node) { 
-             graph.addEdge(0,i,1); ///Add edge from source to left side 
-             graph.addEdge(i+node,node + node + 1,1); ///Add edge from right side to sink 
-         } 
-   
-         FOR(c,0,SZ(child)-1) { 
-             int s = child[c]; 
-             FOR(i,0,15) { 
-                 if ( s & ( 1 << i ) ) { 
-                     int t = s + ( 1 << i ); 
-                     if ( t <= l ) { 
-                         graph.addEdge ( c+1, node + mp[t], 1 ); ///Add edge between left and right side 
-                     } 
-                 } 
-             } 
-         } 
-   
-         int m = graph.maxFlow(node+node+1,inf); ///Find flow 
-   
-         printf ( "Case %d: %d\n", ++cnt, SZ(child) - m ); ///Result is total - flow 
-     } 
-   
-     return 0; 
- } 
-   
				LyoqKioqKioqKioqVGVtcGxhdGUgU3RhcnRzIEhlcmUqKioqKioqKioqKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIGZmIGZpcnN0CiNkZWZpbmUgc3Mgc2Vjb25kCiNkZWZpbmUgTVAgbWFrZV9wYWlyCiNkZWZpbmUgRk9SKGkseCx5KSBmb3IodmxvbmcgaSA9ICh4KSA7IGkgPD0gKHkpIDsgKytpKQojZGVmaW5lIFJPRihpLHgseSkgZm9yKHZsb25nIGkgPSAoeSkgOyBpID49ICh4KSA7IC0taSkKI2RlZmluZSBDTFIoeCx5KSBtZW1zZXQoeCx5LHNpemVvZih4KSkKI2RlZmluZSBVTklRVUUoVikgKFYpLmVyYXNlKHVuaXF1ZSgoVikuYmVnaW4oKSwoVikuZW5kKCkpLChWKS5lbmQoKSkKI2RlZmluZSBNSU4oYSxiKSAoKGEpPChiKT8oYSk6KGIpKQojZGVmaW5lIE1BWChhLGIpICgoYSk+KGIpPyhhKTooYikpCiNkZWZpbmUgQUxMKHgpICh4KS5iZWdpbigpLCh4KS5lbmQoKQojZGVmaW5lIFNaKHgpICgodmxvbmcpKHgpLnNpemUoKSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyB2bG9uZzsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKCmNvbnN0IHZsb25nIGluZiA9IDIxNDczODM2NDc7CgovKioqKioqKioqKipUZW1wbGF0ZSBFbmRzIEhlcmUqKioqKioqKioqKi8KCnN0cnVjdCBub2RlIHsKICAgIGludCB4LCB5LCBuZXh0LCBjYXAsIGNvc3Q7Cn07CgojZGVmaW5lIE5PREUgMjAwMTAKI2RlZmluZSBFREdFIDUwMDAwMTAKCi8vL0Zsb3cgVGVtcGxhdGUKc3RydWN0IEZMT1cgewogICAgaW50IHNvdXJjZSwgc2luazsKCiAgICBpbnQgaGVhZFtOT0RFXTsKICAgIHZvaWQgY2xlYXIoKSB7CiAgICAgICAgZSA9IDA7CiAgICAgICAgQ0xSKGhlYWQsLTEpOwogICAgfQoKICAgIG5vZGUgZWRnZVtFREdFXTsgaW50IGU7CiAgICB2b2lkIGFkZEVkZ2UgKCBpbnQgdSwgaW50IHYsIGludCBjYXAgKSB7CiAgICAgICAgZWRnZVtlXS54ID0gdTsgZWRnZVtlXS55ID0gdjsgZWRnZVtlXS5jYXAgPSBjYXA7CiAgICAgICAgZWRnZVtlXS5uZXh0ID0gaGVhZFt1XTsgaGVhZFt1XSA9IGU7IGUrKzsKICAgICAgICBlZGdlW2VdLnggPSB2OyBlZGdlW2VdLnkgPSB1OyBlZGdlW2VdLmNhcCA9IDA7CiAgICAgICAgZWRnZVtlXS5uZXh0ID0gaGVhZFt2XTsgaGVhZFt2XSA9IGU7IGUrKzsKICAgIH0KCiAgICBpbnQgdmlzW05PREVdLCBxW05PREVdLCBub3dbTk9ERV07CiAgICBib29sIGJmcyAoICkgewogICAgICAgIG1lbXNldCAoIHZpcywgLTEsIHNpemVvZiB2aXMgKTsKICAgICAgICB2aXNbc291cmNlXSA9IDA7CiAgICAgICAgaW50IGluaSA9IDAsIHFlbmQgPSAwOwogICAgICAgIHFbcWVuZCsrXSA9IHNvdXJjZTsKCiAgICAgICAgd2hpbGUgKCBpbmkgPCBxZW5kICYmIHZpc1tzaW5rXSA9PSAtMSApIHsKICAgICAgICAgICAgaW50IHMgPSBxW2luaSsrXTsKICAgICAgICAgICAgaW50IGk7CiAgICAgICAgICAgIGZvciAoaT1oZWFkW3NdO2khPS0xO2k9IGVkZ2VbaV0ubmV4dCl7CiAgICAgICAgICAgICAgICBpbnQgdCA9IGVkZ2VbaV0ueTsKICAgICAgICAgICAgICAgIGlmICggdmlzW3RdID09IC0xICYmIGVkZ2VbaV0uY2FwKXsKICAgICAgICAgICAgICAgICAgICB2aXNbdF0gPSB2aXNbc10gKyAxOwogICAgICAgICAgICAgICAgICAgIHFbcWVuZCsrXSA9IHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCB2aXNbc2lua10gIT0gLTEgKSByZXR1cm4gdHJ1ZTsKICAgICAgICBlbHNlIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGludCBkZnMgKCBpbnQgcywgaW50IGYgKSB7CiAgICAgICAgaWYgKCBmID09IDAgKSByZXR1cm4gMDsKICAgICAgICBpZiAoIHMgPT0gc2luayApIHJldHVybiBmOwogICAgICAgIGZvciAoIGludCAmaT1ub3dbc107aSE9LTE7aT1lZGdlW2ldLm5leHQpewogICAgICAgICAgICBpbnQgdCA9IGVkZ2VbaV0ueTsKICAgICAgICAgICAgaWYgKCB2aXNbc10gKyAxICE9IHZpc1t0XSApIGNvbnRpbnVlOwogICAgICAgICAgICBpbnQgcHVzaGVkPWRmcyh0LE1JTihmLGVkZ2VbaV0uY2FwKSk7CiAgICAgICAgICAgIGlmICggcHVzaGVkICkgewogICAgICAgICAgICAgICAgZWRnZVtpXS5jYXAgLT0gcHVzaGVkOwogICAgICAgICAgICAgICAgZWRnZVtpXjFdLmNhcCArPSBwdXNoZWQ7CiAgICAgICAgICAgICAgICByZXR1cm4gcHVzaGVkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGludCBtYXhGbG93ICggaW50IGxpbWl0LCBpbnQgZmxvdyApIHsKICAgICAgICBpbnQgcmVzID0gMDsKICAgICAgICB3aGlsZSAoIDEgKSB7CiAgICAgICAgICAgIGlmICggZmxvdyA9PSAwICkgYnJlYWs7CiAgICAgICAgICAgIGlmICggYmZzICgpID09IGZhbHNlICkgYnJlYWs7CiAgICAgICAgICAgIGludCBpOwogICAgICAgICAgICBmb3IgKCBpPTA7aTw9bGltaXQ7aSsrKW5vd1tpXT0gaGVhZFtpXTsKICAgICAgICAgICAgd2hpbGUgKGludCBwdXNoZWQ9ZGZzKHNvdXJjZSxmbG93ICkgKSB7CiAgICAgICAgICAgICAgICByZXMgKz0gcHVzaGVkOyAvLy9DYW4gb3ZlcmZsb3cgZGVwZW5kaW5nIG9uIE1heCBGbG93CiAgICAgICAgICAgICAgICBmbG93IC09IHB1c2hlZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzOwogICAgfQp9Z3JhcGg7CgppbnQgdmlzWzEwMDEwXSwgdnYgPSAxOwppbnQgcXFxWzEwMDEwXTsgLy8vUXVldWUgZm9yIEJGUwppbnQgdG90YWwgPSAwOwoKLy8vR2VuZXJhdGUgYWxsIGNoaWxkcmVuCnZvaWQgYmZzICggaW50IHMsIGludCBsaW0gKSB7CiAgICBpbnQgcWgsIHF0OwogICAgcWggPSBxdCA9IDA7CiAgICBxcXFbcXQrK10gPSBzOwoKICAgIHZpc1tzXSA9IHZ2OwoKICAgIHdoaWxlICggcWggPCBxdCApIHsKICAgICAgICBzID0gcXFxW3FoKytdOwoKICAgICAgICBGT1IoaSwwLDE1KSB7CiAgICAgICAgICAgIGlmICggcyAmICggMSA8PCBpICkgKSB7CiAgICAgICAgICAgICAgICBpbnQgdCA9IHMgKyAoIDEgPDwgaSApOyAvLy9HZW5lcmF0ZSBDaGlsZAogICAgICAgICAgICAgICAgaWYgKCB0IDw9IGxpbSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIHZpc1t0XSAhPSB2diApIHsgLy8vSGFzIG5vdCBiZWVuIGdlbmVyYXRlZCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAgdmlzW3RdID0gdnY7CiAgICAgICAgICAgICAgICAgICAgICAgIHFxcVtxdCsrXSA9IHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgppbnQgbXBbMTAwMTBdOwoKaW50IG1haW4gKCkgewogICAgI2lmZGVmIGZvcnRocmlnaHQ0OAogICAgZnJlb3BlbiAoICJpbnB1dC50eHQiLCAiciIsIHN0ZGluICk7CiAgICAvL2ZyZW9wZW4gKCAib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0ICk7CiAgICAjZW5kaWYgLy8gZm9ydGhyaWdodDQ4CgogICAgaW50IGthc2U7CiAgICBzY2FuZiAoICIlZCIsICZrYXNlICk7CgogICAgaW50IGNudCA9IDA7CgogICAgd2hpbGUgKCBrYXNlLS0gKSB7CiAgICAgICAgaW50IG47CiAgICAgICAgc2NhbmYgKCAiJWQiLCAmbiApOwoKICAgICAgICBpbnQgbDsKICAgICAgICBzY2FuZiAoICIlZCIsICZsICk7CgogICAgICAgIGdyYXBoLmNsZWFyKCk7IC8vL0NsZWFyIEdyYXBoCgogICAgICAgIHZ2Kys7IC8vL0NsZWFyIHZpc2l0IGFycmF5CiAgICAgICAgRk9SKGksMCxuLTEpIHsKICAgICAgICAgICAgaW50IHNlZWQ7CiAgICAgICAgICAgIHNjYW5mICggIiVkIiwgJnNlZWQgKTsKICAgICAgICAgICAgYmZzICggc2VlZCwgbCApOyAvLy9HZW5lcmF0ZSBhbGwgY2hpbGRyZW4gb2Ygc2VlZAogICAgICAgIH0KCiAgICAgICAgdmkgY2hpbGQ7CiAgICAgICAgRk9SKGksMSxsKSB7CiAgICAgICAgICAgIGlmICggdmlzW2ldID09IHZ2ICkgY2hpbGQucGIgKCBpICk7IC8vL0NvbGxlY3QgYWxsIGNoaWxkIGluIG9uZSBwbGFjZQogICAgICAgIH0KCiAgICAgICAgaW50IGN1ciA9IDE7CiAgICAgICAgLy8vTWFwIGFsbCBjaGlsZHJlbiB0byBuZXcgbm9kZXMuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGxvd2VyIG5vZGUgbnVtYmVyIGluIEZsb3cKICAgICAgICBGT1IoaSwwLFNaKGNoaWxkKS0xKSB7CiAgICAgICAgICAgIG1wW2NoaWxkW2ldXSA9IGN1cisrOwogICAgICAgIH0KCiAgICAgICAgaW50IG5vZGUgPSBjaGlsZC5zaXplKCk7CiAgICAgICAgZ3JhcGguc291cmNlID0gMDsKICAgICAgICBncmFwaC5zaW5rID0gbm9kZSArIG5vZGUgKyAxOyAvLy9Bc3NpZ24gc291cmNlIGFuZCBzaW5rCgogICAgICAgIEZPUihpLDEsbm9kZSkgewogICAgICAgICAgICBncmFwaC5hZGRFZGdlKDAsaSwxKTsgLy8vQWRkIGVkZ2UgZnJvbSBzb3VyY2UgdG8gbGVmdCBzaWRlCiAgICAgICAgICAgIGdyYXBoLmFkZEVkZ2UoaStub2RlLG5vZGUgKyBub2RlICsgMSwxKTsgLy8vQWRkIGVkZ2UgZnJvbSByaWdodCBzaWRlIHRvIHNpbmsKICAgICAgICB9CgogICAgICAgIEZPUihjLDAsU1ooY2hpbGQpLTEpIHsKICAgICAgICAgICAgaW50IHMgPSBjaGlsZFtjXTsKICAgICAgICAgICAgRk9SKGksMCwxNSkgewogICAgICAgICAgICAgICAgaWYgKCBzICYgKCAxIDw8IGkgKSApIHsKICAgICAgICAgICAgICAgICAgICBpbnQgdCA9IHMgKyAoIDEgPDwgaSApOwogICAgICAgICAgICAgICAgICAgIGlmICggdCA8PSBsICkgewogICAgICAgICAgICAgICAgICAgICAgICBncmFwaC5hZGRFZGdlICggYysxLCBub2RlICsgbXBbdF0sIDEgKTsgLy8vQWRkIGVkZ2UgYmV0d2VlbiBsZWZ0IGFuZCByaWdodCBzaWRlCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpbnQgbSA9IGdyYXBoLm1heEZsb3cobm9kZStub2RlKzEsaW5mKTsgLy8vRmluZCBmbG93CgogICAgICAgIHByaW50ZiAoICJDYXNlICVkOiAlZFxuIiwgKytjbnQsIFNaKGNoaWxkKSAtIG0gKTsgLy8vUmVzdWx0IGlzIHRvdGFsIC0gZmxvdwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==