#include <bits/stdc++.h>
using namespace std;
int H, W;
vector<string> img;
map<char, vector<string>> font;
vector<string> crop(const vector<string>& v, int l, int r) {
vector<string> res(H);
for (int i = 0; i < H; i++) res[i] = v[i].substr(l, r - l + 1);
return res;
}
int diff(const vector<string>& a, const vector<string>& b) {
int h = a.size(), w = a[0].size();
int res = 0;
for (int i = 0; i < h; i++)
for (int j = 0; j < w; j++)
res += (a[i][j] != b[i][j]);
return res;
}
char recognize(const vector<string>& letter) {
char best = '?';
int bestScore = 1e9;
for (auto& kv : font) {
const auto& tpl = kv.second;
if (tpl.size() != letter.size()) continue;
if (tpl[0].size() != letter[0].size()) continue;
int d = diff(letter, tpl);
if (d < bestScore) {
bestScore = d;
best = kv.first;
}
}
return best;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> W >> H;
img.resize(H);
for (int i = 0; i < H; i++) cin >> img[i];
// giả sử đã load font 26 chữ vào font['a'..'z']
string res;
int col = 0;
while (col < W) {
int start = col;
while (start < W) {
bool ok = false;
for (int i = 0; i < H; i++) if (img[i][start] == '#') { ok = true; break; }
if (ok) break;
start++;
}
if (start == W) break;
int end = start;
while (end < W) {
bool ok = false;
for (int i = 0; i < H; i++) if (img[i][end] == '#') { ok = true; break; }
if (!ok) break;
end++;
}
vector<string> letter = crop(img, start, end - 1);
res.push_back(recognize(letter));
col = end;
}
cout << res << "\n";
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgSCwgVzsKdmVjdG9yPHN0cmluZz4gaW1nOwptYXA8Y2hhciwgdmVjdG9yPHN0cmluZz4+IGZvbnQ7Cgp2ZWN0b3I8c3RyaW5nPiBjcm9wKGNvbnN0IHZlY3RvcjxzdHJpbmc+JiB2LCBpbnQgbCwgaW50IHIpIHsKICAgIHZlY3RvcjxzdHJpbmc+IHJlcyhIKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSDsgaSsrKSByZXNbaV0gPSB2W2ldLnN1YnN0cihsLCByIC0gbCArIDEpOwogICAgcmV0dXJuIHJlczsKfQoKaW50IGRpZmYoY29uc3QgdmVjdG9yPHN0cmluZz4mIGEsIGNvbnN0IHZlY3RvcjxzdHJpbmc+JiBiKSB7CiAgICBpbnQgaCA9IGEuc2l6ZSgpLCB3ID0gYVswXS5zaXplKCk7CiAgICBpbnQgcmVzID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaDsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdzsgaisrKQogICAgICAgICAgICByZXMgKz0gKGFbaV1bal0gIT0gYltpXVtqXSk7CiAgICByZXR1cm4gcmVzOwp9CgpjaGFyIHJlY29nbml6ZShjb25zdCB2ZWN0b3I8c3RyaW5nPiYgbGV0dGVyKSB7CiAgICBjaGFyIGJlc3QgPSAnPyc7CiAgICBpbnQgYmVzdFNjb3JlID0gMWU5OwogICAgZm9yIChhdXRvJiBrdiA6IGZvbnQpIHsKICAgICAgICBjb25zdCBhdXRvJiB0cGwgPSBrdi5zZWNvbmQ7CiAgICAgICAgaWYgKHRwbC5zaXplKCkgIT0gbGV0dGVyLnNpemUoKSkgY29udGludWU7CiAgICAgICAgaWYgKHRwbFswXS5zaXplKCkgIT0gbGV0dGVyWzBdLnNpemUoKSkgY29udGludWU7CiAgICAgICAgaW50IGQgPSBkaWZmKGxldHRlciwgdHBsKTsKICAgICAgICBpZiAoZCA8IGJlc3RTY29yZSkgewogICAgICAgICAgICBiZXN0U2NvcmUgPSBkOwogICAgICAgICAgICBiZXN0ID0ga3YuZmlyc3Q7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGJlc3Q7Cn0KCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNpbiA+PiBXID4+IEg7CiAgICBpbWcucmVzaXplKEgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBIOyBpKyspIGNpbiA+PiBpbWdbaV07CgogICAgLy8gZ2nhuqMgc+G7rSDEkcOjIGxvYWQgZm9udCAyNiBjaOG7ryB2w6BvIGZvbnRbJ2EnLi4neiddCgogICAgc3RyaW5nIHJlczsKICAgIGludCBjb2wgPSAwOwogICAgd2hpbGUgKGNvbCA8IFcpIHsKICAgICAgICBpbnQgc3RhcnQgPSBjb2w7CiAgICAgICAgd2hpbGUgKHN0YXJ0IDwgVykgewogICAgICAgICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSDsgaSsrKSBpZiAoaW1nW2ldW3N0YXJ0XSA9PSAnIycpIHsgb2sgPSB0cnVlOyBicmVhazsgfQogICAgICAgICAgICBpZiAob2spIGJyZWFrOwogICAgICAgICAgICBzdGFydCsrOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnQgPT0gVykgYnJlYWs7CiAgICAgICAgaW50IGVuZCA9IHN0YXJ0OwogICAgICAgIHdoaWxlIChlbmQgPCBXKSB7CiAgICAgICAgICAgIGJvb2wgb2sgPSBmYWxzZTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBIOyBpKyspIGlmIChpbWdbaV1bZW5kXSA9PSAnIycpIHsgb2sgPSB0cnVlOyBicmVhazsgfQogICAgICAgICAgICBpZiAoIW9rKSBicmVhazsKICAgICAgICAgICAgZW5kKys7CiAgICAgICAgfQogICAgICAgIHZlY3RvcjxzdHJpbmc+IGxldHRlciA9IGNyb3AoaW1nLCBzdGFydCwgZW5kIC0gMSk7CiAgICAgICAgcmVzLnB1c2hfYmFjayhyZWNvZ25pemUobGV0dGVyKSk7CiAgICAgICAgY29sID0gZW5kOwogICAgfQogICAgY291dCA8PCByZXMgPDwgIlxuIjsKfQo=
NjYgMjIKLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi4uLi4uLiMjIyMjIyMjIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgouLi4uIyMjIyMjIyMjIyMjIy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLi4uIyMjLiMjIyMjIyMjIyMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi4uIyMjIyMjLi4uLiMjIyMjIy4uLi4uLi4uLiMjIyMjIyMjLi4uLi4uLi4uLi4uLiMjIyMjIyMjIyMuLi4uLi4uLgouLiMjIyMjLi4uLi4uIyMjIyMuLi4uLi4uIyMjIy4uIyMjIyMjLi4uLi4uLi4uIyMjIyMjIyMjIyMjIyMuLi4uLi4KLiMjIyMjLi4uLi4uLi4jIyMjLi4uLi4uIyMjLi4uLi4uIyMjIyMuLi4uLi4uIyMjLiMjLi4uLiMjLiMjIy4uLi4uCi4uLi4uLi4uLi4uLi4uIyMjIy4uLi4uLiMjIy4uLi4uLiMjIyMjLi4uLi4uLiMjIyMjLi4uLi4uIyMjIyMuLi4uLgouLi4uLi4uLi4uLi4jIyMjIyMuLi4uLi4jIyMuLi4uLi4uIyMjIy4uLi4uLi4jIyMjLi4uLi4uLiMjIyMuLi4uLi4KLi4uLi4uIyMjIyMjIyMjIyMjLi4uLi4uLi4uLi4uLi4uLiMjIyMuLi4uLi4uLi4uLi4uLi4uLi4jIyMjIy4uLi4uCi4uLiMjIyMjIyMjIyMjLiMjIy4uLi4uLi4uLi4uLi4jIyMjIyMjLi4uLi4uLi4uLi4uLi4jIyMjIyMjIyMuLi4uLgouLiMjIyMjIyMjIyMjIyMjIyMuLi4uLi4uLi4jIyMjIyMuIyMjIy4uLi4uLi4uLi4jIyMjIyMjIyMjIyMjLi4uLi4KLiMjIyMjIyMuLi4uLi4jIyMjLi4uLi4uLiMjIyMjLi4uLiMjIyMuLi4uLi4uLiMjIyMjIyMjLi4jIyMjIy4uLi4uCi4jIyMjIy4uLi4uLi4uIyMjIy4uLi4uLiMjIyMuLi4uLi4jIyMjLi4uLi4uLiMjIyMjLi4uLi4uIyMuIyMuLi4uLgouIyMjIyMuLi4uLi4uIyMjIyMuLi4uLiMjIyMuLi4uLi4uIyMjIy4uLi4uLiMjIyMjLi4uLi4uLiMjIyMjLi4uLi4KLiMjIyMuLi4uLi4uLiMjIyMjLi4uLi4jIyMjLi4uLi4uLiMjIyMuLi4uLi4jIyMjLi4uLi4uLi4jIyMjIy4uLi4uCi4jIyMjIy4uLi4uLiMjIyMjIy4uLi4uIyMjIy4uLi4uLiMjLiMjLi4uLi4uIyMjIy4uLi4uLi4uIyMjIyMuLi4uLgouIyMjIyMjLi4uIyMjIyMjIyMuLi4uLiMjIyMjLi4uLiMjIyMjIy4uLi4uLiMjLiMjLi4uLi4jIyMjIyMjLi4uLi4KLi4jIyMjIyMjIyMjIyMjIyMjIy4uLi4jIy4jIy4uLiMjIyMjIyMuLi4uLi4jIyMjIyMuLiMjIyMjIyMjIyMuLi4uCi4uIyMjIyMjIyMjIyMjIyMjIyMuLi4uIyMjIyMjIyMjIy4jIyMjIy4uLi4uLiMjIyMjIyMjIyMjLiMjIyMjIyMjLgouLi4uIyMjIyMjIyMuLiMjIyMjLi4uLi4uIy4jIyMuLi4uIyMjIyMjIy4uLi4uLiMjIyMjIyMuLi4uIyMjIyMjIy4KLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCg==
66 22
..................................................................
......#########...................................................
....#############.................................................
...###.##########.................................................
..######....######.........########.............##########........
..#####......#####.......####..######.........##############......
.#####........####......###......#####.......###.##....##.###.....
..............####......###......#####.......#####......#####.....
............######......###.......####.......####.......####......
......############................####..................#####.....
...###########.###.............#######..............#########.....
..################.........######.####..........#############.....
.#######......####.......#####....####........########..#####.....
.#####........####......####......####.......#####......##.##.....
.#####.......#####.....####.......####......#####.......#####.....
.####........#####.....####.......####......####........#####.....
.#####......######.....####......##.##......####........#####.....
.######...########.....#####....######......##.##.....#######.....
..#################....##.##...#######......######..##########....
..#################....##########.#####......###########.########.
....########..#####......#.###....#######......#######....#######.
..................................................................