#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
map<vector<ll>,ll> a1;
map<vector<ll>,ll> a2;
map<vector<ll>,ll> a3;
map<vector<ll>,ll> a4;
map<vector<ll>,ll> a5;
void combinationUtil(ll arr[], ll data[],
ll start,ll end,
ll index,ll r,ll g);
void printCombination(ll arr[],ll n,ll r,ll g)
{
ll data[r];
combinationUtil(arr, data, 0, n-1, 0, r,g);
}
void combinationUtil(ll arr[], ll data[],
ll start, ll end,
ll index, ll r,ll g)
{
if(index==r)
{
vector<ll> h;
for(ll j = 0; j < r; j++)
{
ll m1=data[j];
h.push_back(m1);
}
if(g==1)
{
a1[h]++;
}
if(g==2)
{
a2[h]++;
}
if(g==3)
{
a3[h]++;
}
if(g==4)
{
a4[h]++;
}
if(g==5)
{
a5[h]++;
}
//cout << endl;
return;
}
// replace index with all possible
// elements. The condition "end-i+1 >= r-index"
// makes sure that including one element
// at index will make a combination with
// remaining elements at remaining positions
for (ll i = start; i <= end &&
end - i + 1 >= r - index; i++)
{
data[index] = arr[i];
combinationUtil(arr, data, i+1,
end, index+1, r,g);
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll t;
cin>>t;
ll i1=1;
while(t--)
{
ll n,s;
cin>>n>>s;
ll a[n+5][8];
ll b[79]={0};
a1.clear();
a2.clear();
a3.clear();
a4.clear();
a5.clear();
ll i=1;
while(i<=n)
{
ll x;
cin>>x;
b[x]++;
ll arr[x];
ll j=0;
while(j<x)
{
cin>>arr[j];
j++;
}
sort(arr,arr+x);
a[i][0]=x;
j=1;
while(j<=x)
{
a[i][j]=arr[j-1];
j++;
}
ll pass=1;
while(pass<=x)
{
printCombination(arr,x,pass,x);
pass++;
}
i++;
}
ll c1=0;
i=1;
while(i<=n)
{
ll x=a[i][0];
vector<ll> h;
ll j=1;
while(j<=x)
{
h.push_back(a[i][j]);
j++;
}
ll pass=1;
while(pass<=x-1)
{
c1=c1+b[pass];
pass++;
}
pass=x;
while(pass<=5)
{
// c1=c1+ (b[pass]-a[h]);
if(pass==1)
{
c1=c1+ (b[pass]-a1[h]);
}
if(pass==2)
{
c1=c1+ (b[pass]-a2[h]);
}
if(pass==3)
{
c1=c1+ (b[pass]-a3[h]);
}
if(pass==4)
{
c1=c1+ (b[pass]-a4[h]);
}
if(pass==5)
{
c1=c1+ (b[pass]-a5[h]);
}
pass++;
}
i++;
}
cout<<"Case #";
cout<<i1;
cout<<": ";
cout<<c1;
i1++;
cout<<"\n";
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwptYXA8dmVjdG9yPGxsPixsbD4gYTE7Cm1hcDx2ZWN0b3I8bGw+LGxsPiBhMjsKbWFwPHZlY3RvcjxsbD4sbGw+IGEzOwptYXA8dmVjdG9yPGxsPixsbD4gYTQ7Cm1hcDx2ZWN0b3I8bGw+LGxsPiBhNTsKdm9pZCBjb21iaW5hdGlvblV0aWwobGwgYXJyW10sIGxsIGRhdGFbXSwgIAogICAgICAgICAgICAgICAgICAgIGxsIHN0YXJ0LGxsIGVuZCwgIAogICAgICAgICAgICAgICAgICAgIGxsIGluZGV4LGxsIHIsbGwgZyk7ICAKICAKCnZvaWQgcHJpbnRDb21iaW5hdGlvbihsbCBhcnJbXSxsbCBuLGxsIHIsbGwgZykgIAp7ICAKICAgIGxsIGRhdGFbcl07ICAKICAgIGNvbWJpbmF0aW9uVXRpbChhcnIsIGRhdGEsIDAsIG4tMSwgMCwgcixnKTsgIAp9ICAKICAKCnZvaWQgY29tYmluYXRpb25VdGlsKGxsIGFycltdLCBsbCBkYXRhW10sICAKICAgICAgICAgICAgICAgICAgICBsbCBzdGFydCwgbGwgZW5kLCAgCiAgICAgICAgICAgICAgICAgICAgbGwgaW5kZXgsIGxsIHIsbGwgZykgIAp7ICAKICAgIAogICAgaWYoaW5kZXg9PXIpICAKICAgIHsgIAogICAgICAgIAogICAgICAgIHZlY3RvcjxsbD4gaDsKICAgICAgICBmb3IobGwgaiA9IDA7IGogPCByOyBqKyspIAogICAgICAgIHsKICAgICAgICBsbCBtMT1kYXRhW2pdOwogICAgICAgICAgICBoLnB1c2hfYmFjayhtMSk7CiAgICAgICAgfQogICAgICAgICAgICBpZihnPT0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgIGExW2hdKys7ICAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKGc9PTIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGEyW2hdKys7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihnPT0zKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhM1toXSsrOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgICAgICBpZihnPT00KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBhNFtoXSsrOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoZz09NSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgYTVbaF0rKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAvL2NvdXQgPDwgZW5kbDsgIAogICAgICAgIHJldHVybjsgIAogICAgfSAgCiAgCiAgICAvLyByZXBsYWNlIGluZGV4IHdpdGggYWxsIHBvc3NpYmxlICAKICAgIC8vIGVsZW1lbnRzLiBUaGUgY29uZGl0aW9uICJlbmQtaSsxID49IHItaW5kZXgiIAogICAgLy8gbWFrZXMgc3VyZSB0aGF0IGluY2x1ZGluZyBvbmUgZWxlbWVudCAgCiAgICAvLyBhdCBpbmRleCB3aWxsIG1ha2UgYSBjb21iaW5hdGlvbiB3aXRoICAKICAgIC8vIHJlbWFpbmluZyBlbGVtZW50cyBhdCByZW1haW5pbmcgcG9zaXRpb25zICAKICAgIGZvciAobGwgaSA9IHN0YXJ0OyBpIDw9IGVuZCAmJiAgCiAgICAgICAgZW5kIC0gaSArIDEgPj0gciAtIGluZGV4OyBpKyspICAKICAgIHsgIAogICAgICAgIGRhdGFbaW5kZXhdID0gYXJyW2ldOyAgCiAgICAgICAgY29tYmluYXRpb25VdGlsKGFyciwgZGF0YSwgaSsxLCAgCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZCwgaW5kZXgrMSwgcixnKTsgIAogICAgfSAgCn0gCmludCBtYWluKCkgCnsKIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQudGllKE5VTEwpOwoKbGwgdDsKY2luPj50OwpsbCBpMT0xOwp3aGlsZSh0LS0pCnsKbGwgbixzOwpjaW4+Pm4+PnM7CmxsIGFbbis1XVs4XTsKbGwgYls3OV09ezB9OwphMS5jbGVhcigpOwphMi5jbGVhcigpOwphMy5jbGVhcigpOwphNC5jbGVhcigpOwphNS5jbGVhcigpOwoKbGwgaT0xOwp3aGlsZShpPD1uKQp7CiAgICBsbCB4OwogICAgY2luPj54OwogICAgYlt4XSsrOwogICAgbGwgYXJyW3hdOwogICAgbGwgaj0wOwogICAgd2hpbGUoajx4KQogICAgewogICAgICAgIAogICAgIGNpbj4+YXJyW2pdOwogICAgICAgIAogICAgICAgIGorKzsKICAgIH0KICAgIHNvcnQoYXJyLGFycit4KTsKICAgIGFbaV1bMF09eDsKICAgIGo9MTsKICAgIHdoaWxlKGo8PXgpCiAgICB7CiAgICAgICAgYVtpXVtqXT1hcnJbai0xXTsKICAgICAgICBqKys7CiAgICB9CiAgICBsbCBwYXNzPTE7CiAgICB3aGlsZShwYXNzPD14KQogICAgewogICAgICAgIHByaW50Q29tYmluYXRpb24oYXJyLHgscGFzcyx4KTsgIAogICAgICAgIHBhc3MrKzsKICAgIH0KICAgIGkrKzsKfQpsbCBjMT0wOwppPTE7CndoaWxlKGk8PW4pCnsKICAgIAogICAgbGwgeD1hW2ldWzBdOwogICAgdmVjdG9yPGxsPiBoOwogICAgbGwgaj0xOwogICAgd2hpbGUoajw9eCkKICAgIHsKICAgICAgICAKICAgICAgICBoLnB1c2hfYmFjayhhW2ldW2pdKTsKICAgICAgICAKICAgICAgICBqKys7CiAgICB9CiAgICAKICAgIAogICAgbGwgcGFzcz0xOwogICAgd2hpbGUocGFzczw9eC0xKQogICAgewogICAgICAgIGMxPWMxK2JbcGFzc107CiAgICAgICAgcGFzcysrOwogICAgfQogICAgCiAgICAKICAgIHBhc3M9eDsKICAgIHdoaWxlKHBhc3M8PTUpCiAgICB7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgCiAgIC8vIGMxPWMxKyAoYltwYXNzXS1hW2hdKTsKICBpZihwYXNzPT0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgYzE9YzErIChiW3Bhc3NdLWExW2hdKTsgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHBhc3M9PTIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgIGMxPWMxKyAoYltwYXNzXS1hMltoXSk7IAogICAgICAgICAgICAgICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYocGFzcz09MykKICAgICAgICAgICAgewogICAgICAgICAgICAgYzE9YzErIChiW3Bhc3NdLWEzW2hdKTsgCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHBhc3M9PTQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjMT1jMSsgKGJbcGFzc10tYTRbaF0pOyAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHBhc3M9PTUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgIGMxPWMxKyAoYltwYXNzXS1hNVtoXSk7IAogICAgICAgICAgICB9CgoKCgoKCgoKICAgICAgICAKICAgICAgICBwYXNzKys7CiAgICB9CiAgICAKICAgIAogICAgCiAgICAKICAgIGkrKzsKfQoKCmNvdXQ8PCJDYXNlICMiOwpjb3V0PDxpMTsKY291dDw8IjogIjsKCmNvdXQ8PGMxOwppMSsrOwoKCgpjb3V0PDwiXG4iOyAgICAKfQoKICAgIHJldHVybiAwOwp9