#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>

using namespace std;

int n ;
int sum = 0; //
int is_in[25] ;
char name[25][25], id[25][25];
int g[25][25]; //
int inde[25];  //iinde[i]-1
int r[25]; //

const int MAXN = 25;
int uN,vN;
int linker[MAXN];
bool used[MAXN];
bool dfs(int u){
    int v;
    for(v=0;v<vN;v++)
        if(g[u][v]&&!used[v]){
            used[v]=true;
            if(linker[v]==-1||dfs(linker[v])){
                linker[v]=u;
                return true;
            }
        }
    return false;
}

int hungary(){
    int res=0;
    int u;
    memset(linker,-1,sizeof(linker));
    for(u=0;u<uN;u++){
        memset(used,0,sizeof(used));
        if(dfs(u))  res++;
    }
    //cout << "res=" << res << endl;
    return res;
}

void solve(){
    int i, j, k;
    for(i = 0; i < n; i ++){
        for(j = 0; j < n; j ++){
            if(g[i][j]){
                g[i][j] = 0;
                if(hungary() < n){
                    g[i][j] = 1;
                    break;
                }
                g[i][j] = 1;
            }
        }
        //cout << "j=" << j << endl;
        if(j == n){
            inde[i] = -1;
        }
        else{
            inde[i] = j;
        }
    }
}

    inline int cmp(int i,int j){
       if (memcmp(name[i],name[j],sizeof name[i]) <= 0) return 1;
       else return 0;
    }

int main(){
    int i, j, k;
    scanf("%d", &n);
    uN = n;
    vN = n;
    int sum = 0;//
    memset(g, 1, sizeof(g));
    for(i = 0; i < n; i ++){
        scanf("%s", id[i]);
    }
    scanf("\n");
    char tmp;
    char stmp[25];
    for (scanf("%c",&tmp); tmp != 'Q'; scanf("%c",&tmp)){
        scanf("%s\n", stmp);
        switch(tmp){
            case 'E':
                for(i = 0; i < sum; i ++){
                    if(strcmp(stmp, name[i]) == 0)
                        break;
                }
                if(i == sum)
                    strcpy(name[sum ++], stmp);
                is_in[i] = 1;
                break;
            case 'L':
                for(i = 0; i < sum; i ++){
                    if(strcmp(stmp, name[i]) == 0)
                        break;
                }
                is_in[i] = 0;
                break  ;
            case 'M':
                for(i = 0; i < n; i ++){
                    if(strcmp(stmp, id[i]) == 0)
                        break;
                }
                for(j = 0; j < n; j ++){
                    if(!is_in[j])
                        g[j][i] = 0; //ij
                }
                break   ;
        }
    }
    solve();
    for(i = 0; i < n; i ++){
        r[i] = i;
    }
    sort(r, r + n, cmp);
    for(i = 0; i < n; i ++){
        printf("%s:", name[r[i]]);
        if(inde[r[i]] == -1)
            printf("???\n" )  ;
        else
            printf("%s\n", id[inde[r[i]]]);
    }
    return 0;
}