#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]; } bool compressible(int number) { return (number / 16 == number % 16); } char modify(char lefty, char righty) { if (lefty == righty) { return lefty; } int number_plus = transform(lefty, righty); int plus_count = 0; do { number_plus++; plus_count++; } while (!compressible(number_plus)); int number_minus = transform(lefty, righty); int minus_count = 0; do { number_minus--; minus_count++; } while (!compressible(number_minus)); if (minus_count <= plus_count) { return mappingDecToHex[number_minus % 16]; } return mappingDecToHex[number_plus % 16]; } string compress(string& pixel) { string vaca = "#"; for (int i = 1; i < 6; i += 2) { vaca += modify(pixel[i], pixel[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; }