#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n; if (!(cin >> n)) return 0; vector a(n); for (string& row : a) cin >> row; const int di[8] = {-1, -1, -1, 0, 0, 1, 1, 1}; const int dj[8] = {-1, 0, 1, -1, 1, -1, 0, 1}; const int v = n * n; vector bomb(v, 0), neighbours(v, 0); queue que; vector queued(v, 1); for (int id = 0; id < v; ++id) que.push(id); auto enqueue = [&](int id) { if (!queued[id]) { queued[id] = 1; que.push(id); } }; while (!que.empty()) { int id = que.front(); que.pop(); queued[id] = 0; int i = id / n, j = id % n; bool should_be_bomb = neighbours[id] < a[i][j] - '0'; if (bomb[id] == should_be_bomb) continue; int delta = should_be_bomb ? 1 : -1; bomb[id] = should_be_bomb; for (int d = 0; d < 8; ++d) { int ni = i + di[d], nj = j + dj[d]; if (ni < 0 || ni >= n || nj < 0 || nj >= n) continue; int nid = ni * n + nj; neighbours[nid] += delta; enqueue(nid); } } string row(n, '.'); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) row[j] = bomb[i * n + j] ? 'o' : '.'; cout << row << '\n'; } return 0; }