#include <bits/stdc++.h>

using namespace std ;

pair <int ,int> sol [600] ;

char convert [] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'} ;
map <char, int> inv ;

int main()
{
	// freopen ("input", "r", stdin) ;
	// freopen ("output", "w", stdout) ;
	int e = 0 ;
	for (char c = '0' ; c <= '9' ; ++ c) {
		inv [c] = e ;
		e += 1 ;
	}
	inv ['A'] = 10 ;
	inv ['B'] = 11 ;
	inv ['C'] = 12 ;
	inv ['D'] = 13 ;
	inv ['E'] = 14 ;
	inv ['F'] = 15 ;
	for (int i = 0 ; i < 500; ++ i) {
		sol [i] = make_pair (200000, 200000) ;
	}
	for (int i = 0; i <= 15; ++ i) {
		for (int j = 0; j <= 15; ++ j) {
			for (int k = 0; k <= 15 ; ++ k) {
				if (abs (i * 16 + j - k * 16 - k) < sol [i*16 + j].first) {
					sol [i * 16 + j] = make_pair (abs (i * 16 + j - k * 16 - k), k) ;
				}
				else if (abs (i * 16 + j - k * 16 - k) == sol [i*16 + j].first) {
					sol [i * 16 + j].second = min (sol [i * 16 + j].second, k) ;
				}
			}
		}
	}
	int n, m ;
	cin >> n >> m ;
	for (int i = 1 ; i <= n ; ++ i) {
		for (int j = 1; j <= m ; ++ j) {
			string cur ;
			cin >> cur ;
			int a = inv [cur[1]] * 16 + inv [cur[2]] ;
			int b = inv [cur[3]] * 16 + inv [cur[4]] ;
			int c = inv [cur[5]] * 16 + inv [cur[6]] ;

			cout << "#" << convert [sol[a].second] << convert [sol[b].second] << convert [sol[c].second] ;
			if (j == m) {
				cout << '\n' ;
			}
			else {
				cout << ' ' ;
			}
		}
	}
	return 0 ;
}