#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline int sz(const T& x) {
  return (int)x.size();
}
pair<pair<int, int>, pair<int, int> > solve(vector<vector<string> > tab) {
  int n = sz(tab);
  int m = sz(tab[0]);
  for (int i1 = 0; i1 < n - 2; ++i1) {
    for (int j1 = 0; j1 < m - 2; ++j1) {
      for (int i2 = 0; i2 < n - 2; ++i2) {
        for (int j2 = 0; j2 < m - 2; ++j2) {
          if (abs(i1 - i2) < 3 && abs(j1 - j2) < 3) continue;
          set<char> sa, sb;
          for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
              sa.insert(tab[i1 + i][j1 + j][0]);
              sb.insert(tab[i1 + i][j1 + j][1]);
            }
          }
          if (sz(sa) != 9 && sz(sb) != 1) continue;
          sa.clear();
          sb.clear();
          for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
              sa.insert(tab[i2 + i][j2 + j][0]);
              sb.insert(tab[i2 + i][j2 + j][1]);
            }
          }
          if (sz(sa) != 9 && sz(sb) != 1) continue;
          return make_pair(pair<int, int>(i1, j1), pair<int, int>(i2, j2));
        }
      }
    }
  }
  return make_pair(pair<int, int>(-1, 0), pair<int, int>(0, 0));
}
void out_sol(pair<pair<int, int>, pair<int, int> > res) {
  cout << "Put the first square to (" << (res.first.first + 1) << ", "
       << (res.first.second + 1) << ").\n";
  cout << "Put the second square to (" << (res.second.first + 1) << ", "
       << (res.second.second + 1) << ").\n";
}
int main() {
  cin.sync_with_stdio(false);
  cout.sync_with_stdio(false);
  char a[13] = {'2', '3', '4', '5', '6', '7', '8',
                '9', 'T', 'J', 'Q', 'K', 'A'};
  char b[4] = {'C', 'D', 'H', 'S'};
  set<string> cards;
  for (int i = 0; i < 13; ++i) {
    for (int j = 0; j < 4; ++j) {
      string s("  ");
      s[0] = a[i];
      s[1] = b[j];
      cards.insert(s);
    }
  }
  int n, m;
  cin >> n >> m;
  vector<vector<string> > table(n, vector<string>(m));
  int jokers = 0;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < m; ++j) {
      string s;
      cin >> s;
      table[i][j] = s;
      cards.erase(s);
      if (s == "J1" || s == "J2") ++jokers;
    }
  }
  if (jokers == 0) {
    pair<pair<int, int>, pair<int, int> > res = solve(table);
    if (res.first.first == -1)
      cout << "No solution.\n";
    else {
      cout << "Solution exists.\nThere are no jokers.\n";
      out_sol(res);
    }
    return 0;
  }
  vector<string> free;
  for (set<string>::iterator it = cards.begin(); it != cards.end(); ++it) {
    free.push_back(*it);
  }
  if (jokers == 1) {
    int i, j;
    for (i = 0; i < n; ++i) {
      for (j = 0; j < m; ++j) {
        if (table[i][j] == "J1" || table[i][j] == "J2") goto BB;
      }
    }
  BB:
    string t = table[i][j];
    for (int k = 0; k < sz(free); ++k) {
      table[i][j] = free[k];
      pair<pair<int, int>, pair<int, int> > res = solve(table);
      if (res.first.first >= 0) {
        cout << "Solution exists.\n";
        cout << "Replace " << t << " with " << table[i][j] << ".\n";
        out_sol(res);
        return 0;
      }
    }
    cout << "No solution.\n";
    return 0;
  }
  if (jokers == 2) {
    int i1 = -1, i2 = -1, j1, j2;
    for (int i = 0; i < n; ++i) {
      for (int j = 0; j < m; ++j) {
        if (table[i][j] == "J1" || table[i][j] == "J2") {
          if (i1 < 0) {
            i1 = i;
            j1 = j;
          } else {
            i2 = i;
            j2 = j;
          }
        }
      }
    }
    string x = table[i1][j1];
    string y = table[i2][j2];
    if (x[1] == '2') {
      swap(x, y);
      swap(i1, i2);
      swap(j1, j2);
    }
    for (int i = 0; i < sz(free); ++i) {
      for (int j = 0; j < sz(free); ++j) {
        if (i == j) continue;
        table[i1][j1] = free[i];
        table[i2][j2] = free[j];
        pair<pair<int, int>, pair<int, int> > res = solve(table);
        if (res.first.first >= 0) {
          cout << "Solution exists.\n";
          cout << "Replace " << x << " with " << table[i1][j1] << " and " << y
               << " with " << table[i2][j2] << ".\n";
          out_sol(res);
          return 0;
        }
      }
    }
  }
  cout << "No solution.\n";
  return 0;
}
