#include <bits/stdc++.h>
using namespace std;
const int Maxn = 20 + 10;
const int INF = 0x7f7f7f7f;
const double eps = 1e-10;
const double pi = acos(-1.0);
inline int compare(double a, double b) {
  return (a > b + eps) ? 1 : ((a + eps < b) ? -1 : 0);
}
int n, m;
pair<int, int> it1, it2;
bool J1, J2;
bool f[Maxn][Maxn];
string s[Maxn][Maxn];
string cards[][13] = {"2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "TC",
                      "JC", "QC", "KC", "AC", "2D", "3D", "4D", "5D", "6D",
                      "7D", "8D", "9D", "TD", "JD", "QD", "KD", "AD", "2H",
                      "3H", "4H", "5H", "6H", "7H", "8H", "9H", "TH", "JH",
                      "QH", "KH", "AH", "2S", "3S", "4S", "5S", "6S", "7S",
                      "8S", "9S", "TS", "JS", "QS", "KS", "AS"};
bool check(int a, int b) {
  set<char> st;
  for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++) st.insert(s[i + a][j + b][0]);
  if (((int)(st).size()) == 9) return true;
  return false;
}
bool solve() {
  bool ff = false;
  for (int i = 0; i + 2 < n; i++)
    for (int j = 0; j + 2 < m; j++) f[i][j] = check(i, j);
  for (int i = 0; i + 2 < n && !ff; i++)
    for (int j = 0; j + 2 < m && !ff; j++)
      if (f[i][j]) {
        for (int k = 0; k + 2 < n && !ff; k++)
          for (int l = j + 3; l + 2 < m && !ff; l++)
            if (f[k][l]) {
              ff = true;
              it1 = pair<int, int>(i + 1, j + 1);
              it2 = pair<int, int>(k + 1, l + 1);
            }
        if (ff) break;
        for (int k = i + 3; k + 2 < n && !ff; k++)
          for (int l = 0; l + 2 < m && !ff; l++)
            if (f[k][l]) {
              ff = true;
              it1 = pair<int, int>(i + 1, j + 1);
              it2 = pair<int, int>(k + 1, l + 1);
            }
      }
  return ff;
}
int main() {
  set<string> str;
  pair<int, int> joke1, joke2;
  ios::sync_with_stdio(0);
  cin >> n >> m;
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 13; j++) str.insert(cards[i][j]);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      cin >> s[i][j];
      if (s[i][j] == "J1") {
        J1 = true;
        joke1 = pair<int, int>(i, j);
      } else if (s[i][j] == "J2") {
        J2 = true;
        joke2 = pair<int, int>(i, j);
      } else
        str.erase(str.find(s[i][j]));
    }
  if (!J1 && !J2) {
    if (solve()) {
      printf("Solution exists.\nThere are no jokers.\n");
      printf("Put the first square to (%d, %d).\n", it1.first, it1.second);
      printf("Put the second square to (%d, %d).\n", it2.first, it2.second);
    } else
      printf("No solution.\n");
  } else if (J1 && J2) {
    for (typeof((str).begin()) p1 = (str).begin(); p1 != (str).end(); p1++)
      for (typeof((str).begin()) p2 = (str).begin(); p2 != (str).end(); p2++)
        if (*p1 != *p2) {
          s[joke1.first][joke1.second] = *p1;
          s[joke2.first][joke2.second] = *p2;
          if (solve()) {
            printf("Solution exists.\n");
            printf("Replace J1 with %s and J2 with %s.\n", p1->c_str(),
                   p2->c_str());
            printf("Put the first square to (%d, %d).\n", it1.first,
                   it1.second);
            printf("Put the second square to (%d, %d).\n", it2.first,
                   it2.second);
            return 0;
          }
        }
    printf("No solution.\n");
  } else if (J1) {
    for (typeof((str).begin()) p1 = (str).begin(); p1 != (str).end(); p1++) {
      s[joke1.first][joke1.second] = *p1;
      if (solve()) {
        printf("Solution exists.\n");
        printf("Replace J1 with %s.\n", p1->c_str());
        printf("Put the first square to (%d, %d).\n", it1.first, it1.second);
        printf("Put the second square to (%d, %d).\n", it2.first, it2.second);
        return 0;
      }
    }
    printf("No solution.\n");
  } else if (J2) {
    for (typeof((str).begin()) p2 = (str).begin(); p2 != (str).end(); p2++) {
      s[joke2.first][joke2.second] = *p2;
      if (solve()) {
        printf("Solution exists.\n");
        printf("Replace J2 with %s.\n", p2->c_str());
        printf("Put the first square to (%d, %d).\n", it1.first, it1.second);
        printf("Put the second square to (%d, %d).\n", it2.first, it2.second);
        return 0;
      }
    }
    printf("No solution.\n");
  }
  return 0;
}
