#include <bits/stdc++.h>
using namespace std;
int m,n;
char a[105][105];
bool mem[105][105];
map <char,int> mp;
void dfs(int r,int c,char curr){
if(r<0||c<0||r>=m||c>=n)return;
if(mem[r][c]==true)return;
if(a[r][c]!=curr)return;
a[r][c]='#';
mem[r][c]=true;
dfs(r+1,c,curr);
dfs(r-1,c,curr);
dfs(r,c+1,curr);
dfs(r,c-1,curr);
return;
}
int main(){
int t,cnt=1;
cin>>t;
while(t--){
cin>>m>>n;
memset(mem,false,sizeof(mem));
mp.clear();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++) cin>>a[i][j];}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(a[i][j]!='#'){
mp[a[i][j]]++;
dfs(i,j,a[i][j]);
}
}}
vector<pair<char, int>> v(mp.begin(), mp.end());
sort(v.begin(), v.end(), [](const auto& a, const auto& b) {
return a.second != b.second ? a.second > b.second : a.first < b.first;
});
cout<<"World #"<<cnt<<"\n";
for(auto &p:v)cout<<p.first<<": "<<p.second<<"\n";
cnt++;
}
return 0;
}