#include #define pb push_back #define f first #define s second #define pii pair #define mp make_pair using namespace std; int n, m; unordered_map mappingHexToDec; unordered_map mappingDecToHex; string pixel; int transform(char first, char second) { return mappingHexToDec[first] * 16 + mappingHexToDec[second]; } string transform(int number) { char second = mappingDecToHex[number % 16]; number /= 16; char first = mappingDecToHex[number]; string bla = ""; bla += first; bla += second; return bla; } char modify(string pixel, int lefty, int righty) { if (pixel[lefty] == pixel[righty]) { return pixel[lefty]; } int number_plus = transform(pixel[lefty], pixel[righty]); int plus_count = 0; do { number_plus++; plus_count++; } while (transform(number_plus)[0] != transform(number_plus)[1]); int number_minus = transform(pixel[lefty], pixel[righty]); int minus_count = 0; do { number_minus--; minus_count++; } while (transform(number_minus)[0] != transform(number_minus)[1]); if (minus_count <= plus_count) { return transform(number_minus)[0]; } return transform(number_plus)[0]; } string compress(string& pixel) { string vaca = "#"; for (int i = 1; i < 6; i += 2) { vaca += modify(pixel, i, i + 1); } return vaca; } int main() { for (int i = 0; i < 10; i++) { mappingDecToHex[i] = i + '0'; mappingHexToDec[i + '0'] = i; } for (int i = 0; i < 6; i++) { mappingDecToHex[i + 10] = i + 'A'; mappingHexToDec[i + 'A'] = i + 10; } cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> pixel; cout << compress(pixel) << ' '; } cout << '\n'; } return 0; }