#include <stdio.h>
#include <stdlib.h>
typedef struct {
int score;
int cnt;
int right_cnt;
int opt[5];
} question;
int main() {
int N, M;
scanf("%d %d", &N, &M);
question q[M];
for (int i = 0; i < M; i++) {
for (int j = 0; j < 5; j++) {
q[i].opt[j] = 0;
}
}
for (int i = 0; i < M; i++) {
scanf("%d %d %d", &q[i].score, &q[i].cnt, &q[i].right_cnt);
char c;
for (int j = 0; j < q[i].right_cnt; j++) {
scanf(" %c", &c);
q[i].opt[c-'a']++;
}
}
int error[M][5], max_error = 0;
for (int i = 0; i < M; i++) {
for (int j = 0; j < 5; j++) {
error[i][j] = 0;
}
}
for (int i = 0; i < N; i++) {
getchar();
double grades = 0.0;
for (int j = 0; j < M; j++) {
int opt_cnt, isRight = 1, isAllRight = 1;
char c;
int opt_stu[5] = {0};
scanf("(%d", &opt_cnt);
for (int k = 0; k < opt_cnt; k++) {
scanf(" %c", &c);
opt_stu[c-'a'] = 1;
}
for (int k = 0; k < 5; k++) {
if(q[j].opt[k] == 1 && opt_stu[k] == 0) {
isAllRight = 0;
error[j][k]++;
} else if (q[j].opt[k] == 0 && opt_stu[k] == 1) {
isRight = 0;
error[j][k]++;
}
if (max_error < error[j][k]) {
max_error = error[j][k];
}
}
scanf(")");
if (j != M - 1) {
scanf(" ");
}
if (isRight) {
if (!isAllRight) {
grades += q[j].score / 2.0;
} else {
grades += q[j].score;
}
}
}
printf("%.1f\n", grades);
}
if (max_error == 0) {
printf("Too simple\n");
} else {
for (int i = 0; i < M; i++) {
for (int j = 0; j < 5; j++) {
if (error[i][j] == max_error) {
printf("%d %d-%c\n", error[i][j], i+1, 'a'+j);
}
}
}
}
return 0;
}