7 7
6C 8C KH 8S 2H 7S JH
3H QC QD TS 4C QH J2
7C 6S 6D 8D 7D 4S JS
3S 3D 9S 3C J1 2D 7H
AH KD AS 9C 2S 5D QS
2C JD 8H 9D 4D 5H 5C
JC KC 6H TH TD KS TC
 7 7
2C 3C 4C 2D 3D 4D JC
5C 6C 7C 5D 6D 7D QC
8C 9C TC 8D J2 TD KC
2H 3H 4H J1 3S 4S AC
5H 6H 7H 5S 6S 7S KH
8H 9H TH 8S 9S TS AH
JD QD KD AD JH QH AS
 3 17
3H AS 2S 9C JH JD JC QH 2C QD JS TD 5C QS 4D 5S 8D
6C QC TC KS 6D 7D AH 7C 4C 5H KD 7S 3D 4H 8S 3S KH
J2 2H 9H AD 8C 8H 4S 9D TS 6S 7H 6H 9S AC 2D 3C J1
 7 7
2C J2 5D 3C AH 6S 8H
TD 7S QD TC AD 5C 3H
3D 4H 6C 2S AC AS 7H
JS 9H JD 6D 7C 9S KS
6H 9C QC 8S 9D 4D QS
4S 5H 5S 8D JH 8C 2D
KC 4C TS TH 3S 7D QH
 7 7
QS 5C 2H JC 6C TD 2S
JD 9D 9S 7S 3H 9H 4D
AD 5H AS JH KC 5D QH
3S 8S 8H 4H AC 6D TC
2C KH TH 3C 7C JS 8C
4C 6S QC 6H 3D 7H KD
7D AH 8D TS QD 2D 4S
 6 6
J1 2D 3D 3C QH KH
4D 5D 6D AH TS QS
7D 8D JD KS AS 9S
TD 5C QD 9H TC QC
TH AD 9C KC AC 2C
KD 4C 9D 6C 7C 8C
 7 3
3H J2 4H
5H 6H 7H
8H 9H TH
2S 3S TS
2D 3D 4D
5D 6D 7D
AD KD QD
 3 3
9C TH JS
AH J1 AD
3D 4D 9D
 3 6
2H 3H 4H 5H 2S 3S
6H 7H 8H 9H 4S 5S
TH JH QH KH 6S 7S
 17 3
TH QD TC
AD 6C TS
KS 7H KC
9H 3S 2S
4D 3D 5H
4C 4S 9S
QH 2C KH
6H 8H JH
J1 5C KD
9D J2 JS
7D 9C JD
TD QS 2D
AS 3C QC
5D 8D 8S
3H 7C 8C
5S JC 2H
4H 7S 6D
 5 5
KH J2 JH 8C 5H
7S KC AC 2S KD
7H TS 6D 5C 8H
QD 2H JC QH 3S
6H TD 4H J1 8S
 3 3
4C 2C 3H
8D 8C 5S
AC 7H QH
 3 14
KH 8H 2H 2C 5C AH 2D 5D 8D 2S 5S KC 8S 5H
QH 9H 3H 3C 6C AC 3D 6D AD 3S 6S 9S JS 6H
JH TH 4H 4C 7C TC 4D 7D AS 4S 7S KS QS 7H
 7 7
2C 3C 4C 2D 3D 4D JC
5C 6C J2 5D 6D 7D QC
8C 9C TC 8D 9D TD KC
2H 3H 4H 2S 3S 4S AC
5H 6H 7H 5S 6S 7S KH
8H 9H TH 8S 9S TS AH
JD QD KD AD JH QH AS
 7 7
2C 3C 4C 2D 3D 4D JC
5C 6C 7C 5D 6D 7D QC
8C 9C TC 8D 9D TD KC
2H 3H 4H 2S 3S 4S AC
5H 6H 7H 5S 6S 7S KH
8H 9H TH 8S 9S TS AH
JD QD KD AD JH QH AS
 13 3
TH 9H 8H
7H 6H 5H
JH 3H 4H
2C 3C 4C
AH 6C 7C
8C 9C AS
2D 3D 4D
5D 6D AD
AC 9D KD
2S 3S 4S
KS 6S 7S
8S 9S 2H
JS QS KH
 5 8
2C 2D 2S 2H 3C 3D 3S 3H
4C 4D 4S 4H 5C 5D 5S 5H
8C 9C TC JC 7D 6H 9H J1
KC QC AC AS 7S JS TH QH
6C 7C J2 JH 6S 8H KH AH
 14 3
8H 9H TH
JH QH KH
2H 3H 4H
2C 3C 4C
5C 6C 7C
AC AD TC
2D 3D 4D
5D 6D 7D
8D AH AS
2S 3S 4S
5S 6S 7S
KC 9S KD
JC QC 8S
5H 6H 7H
 9 3
8D AH TD
5D 6D 7D
AS 3D 4D
8C AD TC
5C 6C KH
2C KS 4C
2H 3H 4H
5H 6H 7H
8H 9H TH
 14 3
8H 9H TH
5H 6H 7H
2H 3H 4H
2C 3C 4C
5C AH 7C
8C 9C AC
2D 3D 4D
5D AS 7D
AD KH TD
2S 3S 4S
5S 6S KC
8S KS TS
9S 7S JS
KD QS 6C
 6 3
7C 8C 9C
TC 2C 3C
QC 5C J1
2D 3D 4D
5D J2 6D
7D AD KS
 9 3
2H 4S AC
9S 2D 2S
AD TD 7S
J1 7D TS
3H QH 6H
JH 8S 5C
TC 6C 4H
9D 5D 9H
3S J2 QD
 6 6
3D 7C 8H 2S 5H 6D
QS KH TS 4D TH AH
4H J2 JC 6S QC JS
QH 9C AS 9H AC 4C
2H 3S KC J1 AD 9D
JD 8C 5S 3H JH 7H
 4 4
7S JD 5C 3S
9H 5H AS J2
KD JS 6D 9S
2S 8D JH J1
 6 3
J2 6D 2D
5D J1 7D
8D 9D TD
5H 6C 7C
8H TS QS
KS AS 2H
 6 7
2H 2D 3H 3D J2 2S 3S
4H 4D 5H 5D 4S 5S 6S
6H 6D TH TD 7S 8S 9S
JH JD QH QD AC KC QC
AH AD TS JS JC TC 9C
KH KD QS KS 8C 7C J1
 5 8
2C 2D 2S 2H 3C 3D 3S 3H
4C 4D 4S 4H 5C 5D 5S 5H
6H 9H J2 7D JC 8C 9C TC
JS TH QH 7S AS KC QC AC
8H KH AH 6S JH 6C 7C J1
 3 3
AH 5H J2
4H 8H KC
4C 9C TH
 5 8
2C 2D 2S 2H 3C 3D 3S 3H
4C 4D 4S 4H 5C 5D 5S 5H
6H 9H J1 7D JC 8C 9C TC
JS TH QH 7S AS KC QC AC
8H KH AH 6S JH 6C 7C J2
 4 13
8D 4S QH AS 3D 8C 6H AD 7D 9S 8S KH 7S
KS 2D 2C JH AC 8H 7H 3C J2 9C TS J1 QD
6D 3H QC 4D JD TH JC TD 4H 2H TC 5H KC
5S JS KD 5D AH 5C 4C 3S 6C 9D QS 6S 2S
 3 3
AH 9D 5D
JH 3S QH
J2 2S J1
 3 3
J1 7H 8H
AH QH 9H
J2 KH 2H
 6 7
J1 2H 3H 2D TS TD TC
4H 5H 6H JH JS JD JC
7H 8H 9H KH KS KD KC
7C 8C 9C AH AS AD TH
4C 5C 6C 3S 4S 5S 6S
J2 2C 3C QH QS QD QC
 5 8
2C 2D 2S 2H 3C 3D 3S 3H
4C 4D 4S 4H 5C 5D 5S 5H
8C 9C TC JC 7D 6H 9H J2
KC QC AC AS 7S JS TH QH
6C 7C J1 JH 6S 8H KH AH
 6 7
J1 2H 3H JH JS JC JD
4H 5H 6H 6D TH TS TD
7H 8H 9H 9D QS QC QD
7C 8C 9C KH KS KC KD
4C 5C 6C AH AS AC AD
2C 3C TC QH 6S 7S 8S
 7 7
J2 3C 4C 2D 3D 4D JC
5C 6C 7C 5D 6D 7D QC
8C 9C TC 8D 9D TD KC
2H 3H 4H 2S 3S 4S AC
5H 6H 7H 5S 6S 7S KH
8H 9H TH 8S 9S TS AH
JD QD KD AD JH QH J1
 7 7
4C 5S 6C 3H QD 8D 5C
7C 4D KC 2C 4S TH 2D
5H QS 9D 6S 2H 8H AC
J1 JC 3D TD J2 8C 7H
3C 5D 9S JD 8S 6D 9C
3S 7D AS KD KS KH AH
QH AD QC TC 2S JH TS
 5 5
2H 2S 2D 3D 4D
3H 3S 5D 6D 7D
2C 3C J2 8D 9D
4C 5C 6C 9H 9S
7C 8C 9C 8H 8S
 3 9
TH 2C AC 5H AH 5D 2D 3S TC
JD QC J1 2H 6C 9D 5S 2S 6S
8D KD J2 3D AS KC TS JC 5C
 13 4
AH TC J2 4D
QD 4S 3C KS
6S 8S 5S 9H
2D JS 7H JD
KD QS JC 6C
AD 3S 8C 7D
AS 2S 9C KC
3D J1 9D 8D
4H 7C TH 4C
9S QC QH 2C
2H 6H KH TD
3H 8H 5C TS
AC 5D 5H JH
 7 7
2C 3C 4C 2D 3D 4D JC
5C 6C 7C 5D 6D 7D QC
8C 9C TC 8D 9D TD KC
2H 3H J1 2S 3S 4S AC
5H 6H 7H 5S 6S 7S KH
8H 9H TH 8S 9S TS AH
JD QD KD AD JH QH AS
 7 7
3C 7S 2C AS 4S AC TS
KC 5H 4C 3S JC QS 9H
J1 JS 6H 3D KH 8D 2S
7H 2D 2H 3H 5S 5D 9C
6S TD KD 4H 7C QC 8C
9D TH 9S 5C QH AD 4D
8S JD 8H JH AH QD 6D
 6 7
2H 2D 3H 3D J1 2S 3S
4H 4D 5H 5D 4S 5S 6S
6H 6D TH TD 7S 8S 9S
JH JD QH QD AC KC QC
AH AD TS JS JC TC 9C
KH KD QS KS 8C 7C J2
 6 7
J2 2H 3H JH JS JC JD
4H 5H 6H 6D TH TS TD
7H 8H 9H 9D QS QC QD
7C 8C 9C KH KS KC KD
4C 5C 6C AH AS AC AD
2C 3C TC QH 6S 7S 8S

No solution.
 Solution exists.
Replace J1 with 2S and J2 with 9D.
Put the first square to (1, 1).
Put the second square to (1, 4).
 Solution exists.
Replace J1 with 5D and J2 with TH.
Put the first square to (1, 9).
Put the second square to (1, 12).
 No solution.
 Solution exists.
There are no jokers.
Put the first square to (1, 5).
Put the second square to (5, 1).
 No solution.
 Solution exists.
Replace J2 with 2C.
Put the first square to (1, 1).
Put the second square to (5, 1).
 No solution.
 No solution.
 No solution.
 No solution.
 No solution.
 No solution.
 Solution exists.
Replace J2 with 7C.
Put the first square to (1, 1).
Put the second square to (1, 4).
 Solution exists.
There are no jokers.
Put the first square to (1, 1).
Put the second square to (1, 4).
 No solution.
 Solution exists.
Replace J1 with 7H and J2 with JD.
Put the first square to (3, 1).
Put the second square to (3, 6).
 No solution.
 No solution.
 No solution.
 Solution exists.
Replace J1 with 4C and J2 with 8D.
Put the first square to (1, 1).
Put the second square to (4, 1).
 No solution.
 Solution exists.
Replace J1 with 2C and J2 with 2D.
Put the first square to (1, 1).
Put the second square to (4, 1).
 No solution.
 Solution exists.
Replace J1 with 3C and J2 with 4C.
Put the first square to (1, 1).
Put the second square to (4, 1).
 Solution exists.
Replace J1 with 2C and J2 with AS.
Put the first square to (1, 5).
Put the second square to (4, 5).
 Solution exists.
Replace J1 with JD and J2 with 7H.
Put the first square to (3, 1).
Put the second square to (3, 6).
 No solution.
 Solution exists.
Replace J1 with 7H and J2 with JD.
Put the first square to (3, 1).
Put the second square to (3, 6).
 No solution.
 No solution.
 No solution.
 No solution.
 Solution exists.
Replace J1 with JD and J2 with 7H.
Put the first square to (3, 1).
Put the second square to (3, 6).
 No solution.
 Solution exists.
Replace J1 with 2C and J2 with JS.
Put the first square to (1, 1).
Put the second square to (1, 4).
 No solution.
 No solution.
 No solution.
 Solution exists.
Replace J1 with 6D and J2 with 7S.
Put the first square to (1, 1).
Put the second square to (5, 2).
 Solution exists.
Replace J1 with 4H.
Put the first square to (1, 1).
Put the second square to (1, 4).
 Solution exists.
Replace J1 with 6C.
Put the first square to (1, 5).
Put the second square to (5, 3).
 Solution exists.
Replace J1 with AS and J2 with 2C.
Put the first square to (1, 5).
Put the second square to (4, 5).
 No solution.

#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const int INF = 1000000000;
const int CardLimit = 54;
const int OneMstCardLimit = 13;
int toNumber(string s) {
  int a = 0;
  int b = 0;
  if (s[1] != '1' && s[1] != '2') {
    if (s[1] == 'C') a = 0;
    if (s[1] == 'D') a = 1;
    if (s[1] == 'H') a = 2;
    if (s[1] == 'S') a = 3;
    if (s[0] >= '0' && s[0] <= '9') b = s[0] - '0' - 2;
    if (s[0] == 'T') b = 8;
    if (s[0] == 'J') b = 9;
    if (s[0] == 'Q') b = 10;
    if (s[0] == 'K') b = 11;
    if (s[0] == 'A') b = 12;
    return a * OneMstCardLimit + b;
  } else {
    if (s[1] == '1') return OneMstCardLimit * 4;
    if (s[1] == '2') return OneMstCardLimit * 4 + 1;
  }
}
string toMst(int numb) {
  if (numb == 4 * OneMstCardLimit) return "J1";
  if (numb == 4 * OneMstCardLimit + 1) return "J2";
  int a = numb / OneMstCardLimit;
  int b = numb % OneMstCardLimit;
  char symb1, symb2;
  if (a == 0) symb1 = 'C';
  if (a == 1) symb1 = 'D';
  if (a == 2) symb1 = 'H';
  if (a == 3) symb1 = 'S';
  if (b >= 0 && b <= 7) symb2 = b + 2 + '0';
  if (b == 8) symb2 = 'T';
  if (b == 9) symb2 = 'J';
  if (b == 10) symb2 = 'Q';
  if (b == 11) symb2 = 'K';
  if (b == 12) symb2 = 'A';
  string ans = "";
  ans += symb2;
  ans += symb1;
  return ans;
}
int n, m;
string T[20][20];
void input() {
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) cin >> T[i][j];
}
int joker1i = -1, joker1j = -1, joker1Numb = 1;
int joker2i = -1, joker2j = -1;
vector<string> notOnTable;
bool oneMst(string a, string b) { return a[1] == b[1]; }
bool oneDst(string a, string b) { return a[0] == b[0]; }
bool itsJoker(string a) { return a[1] == '1' || a[1] == '2'; }
void formGoodData() {
  bool B[54] = {};
  for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) {
      B[toNumber(T[i][j])] = 1;
      if (itsJoker(T[i][j]))
        if (T[i][j][1] == '1')
          joker1i = i, joker1j = j;
        else
          joker2i = i, joker2j = j;
    }
  if (joker1i == -1 && joker2i != -1)
    swap(joker1i, joker2i), swap(joker1j, joker2j), joker1Numb = 2;
  for (int i = 0; i < 52; i++)
    if (!B[i]) notOnTable.push_back(toMst(i));
}
bool checkOnOneMst(int n1, int m1) {
  if (n - n1 < 3 || m - m1 < 3) return false;
  for (int i = n1; i < n1 + 3; i++)
    for (int j = m1; j < m1 + 3; j++) {
      if (!oneMst(T[i][j], T[n1][m1])) return false;
    }
  return true;
}
bool checkOnDifDst(int n1, int m1) {
  if (n - n1 < 3 || m - m1 < 3) return false;
  for (int i1 = n1; i1 < n1 + 3; i1++)
    for (int j1 = m1; j1 < m1 + 3; j1++)
      for (int i2 = n1; i2 < n1 + 3; i2++)
        for (int j2 = m1; j2 < m1 + 3; j2++) {
          if (i1 == i2 && j1 == j2) continue;
          if (oneDst(T[i1][j1], T[i2][j2])) return false;
        }
  return true;
}
bool answerExist = false;
int oneMstN1 = -1, oneMstM1 = -1, difDstN1 = -1, difDstM1 = -1;
inline int mabs(int a) { return a < 0 ? -a : a; }
bool globalCheck() {
  for (int i1 = 0; i1 <= n - 3; i1++)
    for (int j1 = 0; j1 <= m - 3; j1++)
      for (int i2 = 0; i2 <= n - 3; i2++)
        for (int j2 = 0; j2 <= m - 3; j2++) {
          if (i2 == 3 && j2 == 0 && i1 == 0 && j1 == 0) int STOP = 1;
          if (mabs(i2 - i1) < 3 && mabs(j2 - j1) < 3) continue;
          if ((checkOnOneMst(i1, j1) || checkOnDifDst(i1, j1)) &&
              (checkOnDifDst(i2, j2) || checkOnOneMst(i2, j2))) {
            oneMstN1 = i1;
            oneMstM1 = j1;
            difDstN1 = i2;
            difDstM1 = j2;
            return true;
          }
        }
  return false;
}
void solve() {
  if (joker1i == -1)
    if (globalCheck()) {
      cout << "Solution exists." << endl;
      cout << "There are no jokers." << endl;
      if (make_pair(oneMstN1, oneMstM1) > make_pair(difDstN1, difDstM1))
        swap(oneMstN1, difDstN1), swap(oneMstM1, difDstM1);
      cout << "Put the first square to (" << oneMstN1 + 1 << ", "
           << oneMstM1 + 1 << ")." << endl;
      cout << "Put the second square to (" << difDstN1 + 1 << ", "
           << difDstM1 + 1 << ")." << endl;
    } else {
      cout << "No solution." << endl;
    }
  if (joker1i != -1 && joker2i == -1) {
    for (int t = 0; t < notOnTable.size(); t++) {
      T[joker1i][joker1j] = notOnTable[t];
      if (globalCheck()) {
        cout << "Solution exists." << endl;
        cout << "Replace J" << joker1Numb << " with " << notOnTable[t] << "."
             << endl;
        if (make_pair(oneMstN1, oneMstM1) > make_pair(difDstN1, difDstM1))
          swap(oneMstN1, difDstN1), swap(oneMstM1, difDstM1);
        cout << "Put the first square to (" << oneMstN1 + 1 << ", "
             << oneMstM1 + 1 << ")." << endl;
        cout << "Put the second square to (" << difDstN1 + 1 << ", "
             << difDstM1 + 1 << ")." << endl;
        return;
      }
    }
    cout << "No solution." << endl;
  }
  if (joker1i != -1 && joker2i != -1) {
    for (int t1 = 0; t1 < notOnTable.size(); t1++)
      for (int t2 = 0; t2 < notOnTable.size(); t2++) {
        if (t1 == t2) continue;
        T[joker1i][joker1j] = notOnTable[t1];
        T[joker2i][joker2j] = notOnTable[t2];
        if (globalCheck()) {
          cout << "Solution exists." << endl;
          cout << "Replace J1 with " << notOnTable[t1] << " and J2 with "
               << notOnTable[t2] << "." << endl;
          if (make_pair(oneMstN1, oneMstM1) > make_pair(difDstN1, difDstM1))
            swap(oneMstN1, difDstN1), swap(oneMstM1, difDstM1);
          cout << "Put the first square to (" << oneMstN1 + 1 << ", "
               << oneMstM1 + 1 << ")." << endl;
          cout << "Put the second square to (" << difDstN1 + 1 << ", "
               << difDstM1 + 1 << ")." << endl;
          return;
        }
      }
    cout << "No solution." << endl;
  }
}
int main() {
  input();
  formGoodData();
  solve();
  return 0;
}
