#include <iostream>
#include <string>
#include <string.h>
#include <stdio.h>
#include <sstream>
#define SZ 10000017
using namespace std;
char b[30];
char str[3000000][25];//3000000
int parent[10000017];
int strmap[3000000];
int gethash(char s[])
{
int seed=31;
int v=0;
for(int i=0;i<strlen(s);i++)
{
v= v*seed+(s[i]-'0');
}
return (v&0x7FFFFFFF)%SZ;
}
bool insert(int position)
{
int _hash = gethash(str[position]);
int next=parent[_hash];
while(next!=-1)
{
if(!strcmp(str[position],str[next]))
break;
next=strmap[next];
}
if(next==-1)
{
strmap[position]=parent[_hash];
parent[_hash]=position;
return 1;
}
return 0;
}
int main()
{
string s;
stringstream ss;
int t,kase=1;
int cnt;
int n,m,i;
gets(b);
sscanf(b,"%d",&t);
//cin>>t;
//getchar();
while(t--)
{
//getline(cin,s);
gets(b);
sscanf(b,"%d%d",&m,&n);
//ss.clear();
//ss<<s;
//ss>>m>>n;
cnt=0;
memset(parent,-1,sizeof(parent));
//memset(strmap,0,sizeof(strmap));
for(i=0;i<m;i++)
//getline(cin,str[i]);
gets(str[i]);
for(int j=0;j<n;j++)
{
//getline(cin,str[i]);
gets(str[i]);
for(int k=0;k<m;k++)
{
//str[i+k+1]=str[k];
strcpy(str[i+k+1],str[k]);
//str[i+k+1].append(str[i]);
strcat(str[i+k+1],str[i]);
if(insert(i+k+1))
cnt++;
//x++;
}
i=i+m+1;
}
cout<<"Case "<<kase++<<": "<<cnt<<"\n";
}
return 0;
}