#include <bits/stdc++.h>
using namespace std;
int no(const string& c) {
  if (c == "J1")
    return 52;
  else if (c == "J2")
    return 53;
  else {
    int n = 0;
    if (isdigit(c[0]))
      n += 4 * (c[0] - '0' - 1);
    else if (c[0] == 'T')
      n += 36;
    else if (c[0] == 'J')
      n += 40;
    else if (c[0] == 'Q')
      n += 44;
    else if (c[0] == 'K')
      n += 48;
    n += (c[1] == 'C' ? 0 : (c[1] == 'D' ? 1 : (c[1] == 'H' ? 2 : 3)));
    return n;
  }
}
string C(int n) {
  if (n == 52)
    return "J1";
  else if (n == 53)
    return "J2";
  else {
    string c;
    int d = 1 + n / 4, r = n % 4;
    if (d == 1)
      c.push_back('A');
    else if (d < 10)
      c.push_back(static_cast<char>('0' + d));
    else if (d == 10)
      c.push_back('T');
    else if (d == 11)
      c.push_back('J');
    else if (d == 12)
      c.push_back('Q');
    else
      c.push_back('K');
    if (r == 0)
      c.push_back('C');
    else if (r == 1)
      c.push_back('D');
    else if (r == 2)
      c.push_back('H');
    else
      c.push_back('S');
    return c;
  }
}
int n, m, u[54], jx[2], jy[2], jc = 0;
string in[17][17], c[17][17];
bool found;
void solve(int t) {
  if (t >= jc) {
    for (int x0 = 0; x0 <= (n - 3); x0++)
      for (int y0 = 0; y0 <= (m - 3); y0++) {
        set<char> c0[2];
        for (int i = x0; i < (x0 + 3); i++)
          for (int j = y0; j < (y0 + 3); j++)
            for (int k = 0; k < 2; k++) c0[k].insert(c[i][j][k]);
        if (c0[0].size() == 9 || c0[1].size() == 1) {
          for (int x1 = x0; x1 <= (n - 3); x1++)
            for (int y1 = (x1 == x0 ? y0 + 3 : 0); y1 <= (m - 3); y1++)
              if (!(((x1 + 2) >= x0 && (x0 + 2) >= x1) &&
                    ((y1 + 2) >= y0 && (y0 + 2) >= y1))) {
                set<char> c1[2];
                for (int i = x1; i < (x1 + 3); i++)
                  for (int j = y1; j < (y1 + 3); j++)
                    for (int k = 0; k < 2; k++) c1[k].insert(c[i][j][k]);
                if (c1[0].size() == 9 || c1[1].size() == 1) {
                  found = true;
                  cout << "Solution exists." << endl;
                  if (jc == 0)
                    cout << "There are no jokers." << endl;
                  else if (jc == 1)
                    cout << "Replace " << in[jx[0]][jy[0]] << " with "
                         << c[jx[0]][jy[0]] << "." << endl;
                  else if (in[jx[0]][jy[0]] == "J1")
                    cout << "Replace " << in[jx[0]][jy[0]] << " with "
                         << c[jx[0]][jy[0]] << " and " << in[jx[1]][jy[1]]
                         << " with " << c[jx[1]][jy[1]] << "." << endl;
                  else
                    cout << "Replace " << in[jx[1]][jy[1]] << " with "
                         << c[jx[1]][jy[1]] << " and " << in[jx[0]][jy[0]]
                         << " with " << c[jx[0]][jy[0]] << "." << endl;
                  cout << "Put the first square to (" << x0 + 1 << ", "
                       << y0 + 1 << ")." << endl;
                  cout << "Put the second square to (" << x1 + 1 << ", "
                       << y1 + 1 << ")." << endl;
                  return;
                }
              }
        }
      }
  } else
    for (int i = 0; i < 52; i++)
      if (!u[i]) {
        u[i] = 1;
        string tmp = c[jx[t]][jy[t]];
        c[jx[t]][jy[t]] = C(i);
        solve(t + 1);
        if (found) return;
        c[jx[t]][jy[t]] = tmp;
        u[i] = 0;
      }
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      cin >> in[i][j];
      c[i][j] = in[i][j];
      u[no(c[i][j])] = 1;
      if (c[i][j] == "J1" || c[i][j] == "J2") {
        jx[jc] = i;
        jy[jc++] = j;
      }
    }
  found = false;
  solve(0);
  if (!found) cout << "No solution." << endl;
  return 0;
}
