#include <cmath>
#include <cstring>
#include <iostream>
#define INF 2000000000
using namespace std;

int n, m;

int vals[20], nrSecv;
char secv[20];

void process (char *);
inline int convertHexa (char, char);
void generareSecv();

int main(){
    int i, j;
    char s[100];

    generareSecv();

    cin>>n>>m;
    for (i=1; i<=n; ++i){
        for (j=1; j<=m; ++j){
            cin>>s;
            process(s);
        }
        cout<<'\n';
    }

    return 0;
}

void process (char *s){
    char cp[100];
    int i, lgcp=0, j, difMin, pozMin, valPIXEL;
    cp[0]=s[0];

    for (i=1; i<=6; i+=2){
        if (s[i]==s[i+1]){
            cp[++lgcp] = s[i];
            continue;
        }

        valPIXEL = convertHexa (s[i], s[i+1]);
        difMin=INF;
        for (j=0; j<nrSecv; ++j)
            if (abs(vals[j] - valPIXEL)<difMin){
                difMin = abs(vals[j]-valPIXEL);
                pozMin = j;
            }

        cp[++lgcp]=secv[pozMin];
    }

    cp[4]=0;
    cout<<cp<<' ';
}

inline int convertHexa (char s1, char s2){
    int values[300];
    int i;
    for (i=0; i<10; ++i) values[i+'0']=i;

    for (i=10; i<=15; ++i) values['A'+i-10] = i;

    return (values[s2] + 16*values[s1]);
}

void generareSecv (){
    int i;
    for (i=0; i<=9; ++i){
        secv[nrSecv]=i+'0';
        vals[nrSecv++] = convertHexa (i+'0', i+'0');
    }

    for (i=10; i<=15; ++i){
        secv[nrSecv]='A'+i-10;
        vals[nrSecv++] = convertHexa ('A'+i-10, 'A'+i-10);
    }

    return;
}