#include <bits/stdc++.h>
#pragma GCC optimize(3)
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC target("sse,sse2,sse3,sse3,sse4,popcnt,abm,mmx")
#pragma GCC target("avx")
using namespace std;
struct IN {
} in;
inline bool delim(char& c) { return c == ' ' || c == '\n' || c == '\r'; }
template <typename T>
inline IN& operator>>(IN& t, T& a) {
  char buf;
  a = 0;
  while (delim(buf = getchar()))
    ;
  if (buf == '-') {
    t >> a;
    a = -a;
    return t;
  }
  while (true) {
    a *= 10;
    a += buf - '0';
    if (delim(buf = getchar())) break;
  }
  return t;
}
inline IN& operator>>(IN& t, std::string& s) {
  char buf;
  s.clear();
  while (delim(buf = getchar()))
    ;
  do {
    s += buf;
  } while (!delim(buf = getchar()));
  return t;
}
inline IN& operator>>(IN& t, char& c) {
  while (delim(c = getchar()))
    ;
  return t;
}
using namespace std;
const int32_t N = 2 * (1e5) + 5;
const int32_t MOD = (1e9) + 7;
char a[10][10];
int32_t main() {
  ios_base::sync_with_stdio();
  cout.tie(0);
  int32_t n, m;
  n = 9, m = 9;
  for (int32_t i(0); i < n; i++) {
    for (int32_t j(0); j < m; j++) {
      in >> a[i][j];
    }
  }
  int32_t x, y, f = 0;
  in >> x >> y;
  x--;
  y--;
  x %= 3;
  y %= 3;
  for (int32_t i(0); i < 3; i++) {
    for (int32_t j(0); j < 3; j++) {
      if (a[x * 3 + i][y * 3 + j] == '.') f = 1;
    }
  }
  if (f == 1) {
    for (int32_t i(0); i < 3; i++) {
      for (int32_t j(0); j < 3; j++) {
        if (a[x * 3 + i][y * 3 + j] == '.') a[x * 3 + i][y * 3 + j] = '!';
      }
    }
  }
  if (f == 0) {
    for (int32_t i(0); i < n; i++) {
      for (int32_t j(0); j < m; j++) {
        if (a[i][j] == '.') a[i][j] = '!';
      }
    }
  }
  for (int32_t i(0); i < n; i++) {
    for (int32_t j(0); j < m; j++) {
      cout << a[i][j];
      if ((j + 1) % 3 == 0) cout << ' ';
    }
    cout << endl;
    if ((i + 1) % 3 == 0) cout << endl;
  }
}
