#include<iostream>
#include<cstdio>
#include<string>
#include<string.h>
#include<map>
#include<vector>
#include<iterator>
using namespace std;
bool isContain(string str1,string str2){
for(unsigned int i=1;i<str2.length();i++){
if(str1.find(str2[i])==string::npos){
return false;
}
}
return true;
}
string compareString(string str1,string str2){
string str="";
for(unsigned int i=1;i<str1.length();i++){
if(str2.find(str1[i])==string::npos){
str+=str1[i];
}
}
for(unsigned int i=1;i<str2.length();i++){
if(str1.find(str2[i])==string::npos){
str+=str2[i];
}
}
return str;
}
int main(){
int n,m;
cin>>n>>m;
string exams[m];
map<char,int> wrongs[m];
vector<vector<string>> stus;
getline(cin,exams[0]);
for(int i=0;i<m;i++){
getline(cin,exams[i]);
}
for(int i=0;i<n;i++){
string str;
getline(cin,str);
vector<string> stu;
for(unsigned int j=0;j<str.length();j++){
if(str[j]=='('){
for(unsigned int k=j+1;k<str.length();k++){
if(str[k]==')'){
string ans=str.substr(j+1,k-j-1);
stu.push_back(ans);
break;
}
}
}
}
stus.push_back(stu);
}
double scores[n]={0};
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
string ans1=exams[j].substr(4,exams[j].length()-4);
string ans2=stus[i][j];
if(ans1==ans2){
scores[i]+=exams[j][0]-'0';
}else{
string str=compareString(ans1,ans2);;
for(unsigned int k=0;k<str.length();k++){
char a=str[k];
wrongs[j][a]++;
}
if(isContain(ans1,ans2)){
scores[i]+=(exams[j][0]-'0')*1.0/2;
}
}
}
}
for(int i=0;i<n;i++){
printf("%.1f\n",scores[i]);
}
int max=0;
for(int i=0;i<m;i++){
if(wrongs[i].size()!=0){
map<char,int>::iterator it;
it=wrongs[i].begin();
while(it!=wrongs[i].end()){
if(it->second>max){
max=it->second;
}
it++;
}
}
}
if(max==0){
printf("Too simple");
}else{
for(int i=0;i<m;i++){
map<char,int>::iterator it;
it=wrongs[i].begin();
while(it!=wrongs[i].end()){
if(it->second==max){
printf("%d %d-%c\n",it->second,i+1,it->first);
}
it++;
}
}
}
return 0;
}