#include <bits/stdc++.h>
using namespace std;
const long long int inf = 1LL << 60;
const long long int nlyinf = 1LL << 55;
struct comparator {
  bool operator()(const pair<long long int, long long int> &l,
                  const pair<long long int, long long int> &r) const {
    if (l.first != l.second) {
      if (l.first == r.second && l.second == r.first)
        return l < pair<long long int, long long int>(r.second, r.first);
    }
    if (l.first != r.first)
      return l.first < r.first;
    else
      return l.second < r.second;
  }
};
template <class T>
ostream &operator<<(ostream &out, vector<T> &V) {
  for (long long int i = 0; i < V.size(); i++) {
    if (V[i] >= nlyinf) {
      cout << "inf ";
    } else {
      cout << V[i] << " ";
    }
  }
  cout << '\n';
  return out;
}
template <class T>
ostream &operator<<(ostream &out, vector<vector<T> > &V) {
  for (long long int i = 0; i < V.size(); i++) {
    cout << V[i] << "\n";
  }
  return out;
}
template <class T>
ostream &operator<<(ostream &out, pair<T, T> &p) {
  cout << "[" << p.first << "," << p.second << "] ";
  return out;
}
template <class T>
void print(vector<T> &V, long long int n) {
  for (long long int i = 0; i < n; i++) {
    cout << V[i] << " ";
  }
  cout << '\n';
}
template <>
void print<long long int>(vector<long long int> &V, long long int n) {
  for (long long int i = 0; i < n; i++) {
    if (V[i] >= nlyinf) {
      cout << "inf";
    } else {
      cout << V[i];
    }
    cout << " ";
  }
  cout << '\n';
}
template <class T1, class T2>
long long min(T1 a1, T2 b2) {
  long a = long(a1);
  long b = long(b2);
  return min(a, b);
}
template <class T1, class T2>
long long max(T1 a1, T2 b2) {
  long a = long(a1);
  long b = long(b2);
  return max(a, b);
}
bool hasEnding(std::string const &fullString, std::string const &ending) {
  if (fullString.length() >= ending.length()) {
    return (0 == fullString.compare(fullString.length() - ending.length(),
                                    ending.length(), ending));
  } else {
    return false;
  }
}
void printMap(unordered_map<string, vector<pair<string, bool> > > &M) {
  for (auto it : M) {
    cout << it.first << " ";
    long long int size = 0;
    for (int i = 0; i < it.second.size(); i++) {
      if (it.second[i].second == 0) {
        size++;
      }
    }
    cout << size << " ";
    for (int i = 0; i < it.second.size(); i++) {
      if (it.second[i].second == 0) {
        cout << it.second[i].first << " ";
      }
    }
    cout << '\n';
  }
}
long long int gcd(long long int a, long long int b) {
  if (a % b == 0) {
    return b;
  }
  return gcd(b, a % b);
}
int main() {
  long long int x, y, r, c;
  vector<vector<char> > V(9, vector<char>(9, '_'));
  for (long long int i = 0; i < 9; i++) {
    for (long long int j = 0; j < 9; j++) {
      cin >> V[i][j];
    }
  }
  cin >> x >> y;
  r = (x - 1) % 3;
  c = (y - 1) % 3;
  bool isAll = true;
  for (long long int i = 3 * r; i < 3 * (r + 1); i++) {
    for (long long int j = 3 * c; j < 3 * (c + 1); j++) {
      if (V[i][j] == '.') {
        isAll = false;
        V[i][j] = '!';
      }
    }
  }
  for (long long int i = 0; i < 9; i++) {
    for (long long int j = 0; j < 9; j++) {
      if (isAll && V[i][j] == '.') {
        cout << '!';
      } else {
        cout << V[i][j];
      }
      if ((j + 1) % 3 == 0) {
        cout << ' ';
      }
    }
    cout << '\n';
    if ((i + 1) % 3 == 0) {
      cout << '\n';
    }
  }
  return 0;
}
