#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    short Lwidth, Lheight;
    cin >> Lwidth >> Lheight; cin.ignore();
    string Text;
    char **alphabet = new char*[256];
    
    //initializing alphabet
    for (char ltr = 'a'; ltr < 'z'+1; ++ltr)
    {
        alphabet[ltr] = new char[Lwidth];
    }
    for (char ltr = 'A'; ltr < 'Z'+1; ++ltr)
    {
        alphabet[ltr] = new char[Lwidth];
    }
    alphabet['?'] = new char[Lwidth];
    
    getline(cin, Text);
    for (short h = 0; h < Lheight; ++h)
    {
        char ltr;
        for (ltr = 'a'; ltr < 'z'+1; ++ltr) //reading letters
        {
            for (short w = 0; w < Lwidth; ++w)
            {
                scanf("%c", &alphabet[ltr][w]);
                alphabet[ltr-('a'-'A')][w] = alphabet[ltr][w];
            }
        }
        
        for (short w = 0; w < Lwidth; ++w) //reading ?
        {
            scanf("%c", &alphabet['?'][w]);
        }
        
        scanf("%c", &ltr); //reading endl
        if (ltr != '\n') cerr << "ERROR: INVALID TESTS PROVIDED\n";
        
        //Putting result out.
        for (short i = 0; i < Text.size(); ++i)
        {
            if //it is a letter
            (
                (('a'-1 < Text[i]) && (Text[i] < 'z'+1)) ||
                (('A'-1 < Text[i]) && (Text[i] < 'Z'+1))
            ) //then print it
                cout << alphabet[Text[i]];
            else //it is definitely something weird
                cout << alphabet['?'];
        }
        cout << '\n';
    }
}