#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int r, c;
if (!(cin >> r >> c)) return 0;
vector<int> base(r, 0);
for (int i = 0; i < r; ++i) {
string s; cin >> s;
for (int j = 0; j < c; ++j)
if (s[j] == 'X') base[i] |= (1 << j); // đen = 1
}
int FULL = (1 << c) - 1;
auto pop = [](int x){ return __builtin_popcount((unsigned)x); };
long long best = LLONG_MAX;
for (int first = 0; first < (1<<c); ++first) {
vector<int> row = base; // copy bàn
long long taps = 0;
auto pressRow = [&](int i, int mask){
if (!mask) return;
taps += pop(mask);
int left = (mask << 1) & FULL;
int right = (mask >> 1);
row[i] ^= mask ^ left ^ right; // chính nó + trái + phải
if (i > 0) row[i-1] ^= mask; // trên
if (i+1 < r) row[i+1] ^= mask; // dưới
};
// áp dụng hàng 1
pressRow(0, first);
// quyết định các hàng tiếp theo theo trạng thái hàng trên
for (int i = 1; i < r; ++i) {
int mustPress = row[i-1]; // ô nào còn đen ở trên thì phải bấm ngay dưới
pressRow(i, mustPress);
}
if (row[r-1] == 0) best = min(best, taps); // thành công nếu hàng cuối trắng hết
}
if (best == LLONG_MAX) {
cout << "Damaged billboard.\n";
} else {
cout << "You have to tap " << best << " tiles.\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBpbnQgciwgYzsKICAgIGlmICghKGNpbiA+PiByID4+IGMpKSByZXR1cm4gMDsKICAgIHZlY3RvcjxpbnQ+IGJhc2UociwgMCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHI7ICsraSkgewogICAgICAgIHN0cmluZyBzOyBjaW4gPj4gczsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGM7ICsraikKICAgICAgICAgICAgaWYgKHNbal0gPT0gJ1gnKSBiYXNlW2ldIHw9ICgxIDw8IGopOyAvLyDEkWVuID0gMQogICAgfQoKICAgIGludCBGVUxMID0gKDEgPDwgYykgLSAxOwogICAgYXV0byBwb3AgPSBbXShpbnQgeCl7IHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQoKHVuc2lnbmVkKXgpOyB9OwoKICAgIGxvbmcgbG9uZyBiZXN0ID0gTExPTkdfTUFYOwogICAgZm9yIChpbnQgZmlyc3QgPSAwOyBmaXJzdCA8ICgxPDxjKTsgKytmaXJzdCkgewogICAgICAgIHZlY3RvcjxpbnQ+IHJvdyA9IGJhc2U7ICAgICAgICAvLyBjb3B5IGLDoG4KICAgICAgICBsb25nIGxvbmcgdGFwcyA9IDA7CiAgICAgICAgYXV0byBwcmVzc1JvdyA9IFsmXShpbnQgaSwgaW50IG1hc2spewogICAgICAgICAgICBpZiAoIW1hc2spIHJldHVybjsKICAgICAgICAgICAgdGFwcyArPSBwb3AobWFzayk7CiAgICAgICAgICAgIGludCBsZWZ0ID0gKG1hc2sgPDwgMSkgJiBGVUxMOwogICAgICAgICAgICBpbnQgcmlnaHQgPSAobWFzayA+PiAxKTsKICAgICAgICAgICAgcm93W2ldIF49IG1hc2sgXiBsZWZ0IF4gcmlnaHQ7ICAgICAvLyBjaMOtbmggbsOzICsgdHLDoWkgKyBwaOG6o2kKICAgICAgICAgICAgaWYgKGkgPiAwKSByb3dbaS0xXSBePSBtYXNrOyAgICAgICAvLyB0csOqbgogICAgICAgICAgICBpZiAoaSsxIDwgcikgcm93W2krMV0gXj0gbWFzazsgICAgIC8vIGTGsOG7m2kKICAgICAgICB9OwoKICAgICAgICAvLyDDoXAgZOG7pW5nIGjDoG5nIDEKICAgICAgICBwcmVzc1JvdygwLCBmaXJzdCk7CgogICAgICAgIC8vIHF1eeG6v3QgxJHhu4tuaCBjw6FjIGjDoG5nIHRp4bq/cCB0aGVvIHRoZW8gdHLhuqFuZyB0aMOhaSBow6BuZyB0csOqbgogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcjsgKytpKSB7CiAgICAgICAgICAgIGludCBtdXN0UHJlc3MgPSByb3dbaS0xXTsgLy8gw7QgbsOgbyBjw7JuIMSRZW4g4bufIHRyw6puIHRow6wgcGjhuqNpIGLhuqVtIG5nYXkgZMaw4bubaQogICAgICAgICAgICBwcmVzc1JvdyhpLCBtdXN0UHJlc3MpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHJvd1tyLTFdID09IDApIGJlc3QgPSBtaW4oYmVzdCwgdGFwcyk7IC8vIHRow6BuaCBjw7RuZyBu4bq/dSBow6BuZyBjdeG7kWkgdHLhuq9uZyBo4bq/dAogICAgfQoKICAgIGlmIChiZXN0ID09IExMT05HX01BWCkgewogICAgICAgIGNvdXQgPDwgIkRhbWFnZWQgYmlsbGJvYXJkLlxuIjsKICAgIH0gZWxzZSB7CiAgICAgICAgY291dCA8PCAiWW91IGhhdmUgdG8gdGFwICIgPDwgYmVzdCA8PCAiIHRpbGVzLlxuIjsKICAgIH0KICAgIHJldHVybiAwOwp9