#include <bits/stdc++.h>   using namespace std;   string A[18][18], s;   int n, m, U[101], us, J[3][3];   bool B[1001];   int r1, c1, r2, c2, size;   int tonum(char ch) {     if (ch ==  C ) return 1;     if (ch ==  D ) return 2;     if (ch ==  H ) return 3;     if (ch ==  S ) return 4;     if (ch ==  T ) return 8;     if (ch ==  J ) return 9;     if (ch ==  Q ) return 10;     if (ch ==  K ) return 11;     if (ch ==  A ) return 12;     return (int)ch - 50;   }   inline bool inside(int a, int b, int c) {     if (b > c) swap(b, c);     return (b <= a && a <= c);   }   inline bool ff(int r, int c) {     bool B[13];     for (int i = 0; i <= 12; i++) B[i] = false;     for (int i = r; i <= r + 2; i++)       for (int j = c; j <= c + 2; j++) {         if (B[tonum(A[i][j][0])]) return false;         B[tonum(A[i][j][0])] = true;       }     return true;   }   inline bool check() {     for (int i = 1; i <= size; i++)       for (int j = i + 1; j <= size; j++) {         r1 = (i % m) ? i / m + 1 : i / m;         c1 = (i % m) ? (i % m) : m;         r2 = (j % m) ? j / m + 1 : j / m;         c2 = (j % m) ? (j % m) : m;         if (!(inside(r2, r1, r1 + 2) && inside(c2, c1, c1 + 2)) &&             !(inside(r2, r1, r1 + 2) && inside(c2 + 2, c1, c1 + 2)) &&             inside(r1 + 2, 1, n) && inside(r2 + 2, 1, n) &&             inside(c1 + 2, 1, m) && inside(c2 + 2, 1, m)) {           if (ff(r1, c1) && ff(r2, c2)) return true;         }       }     return false;   }   char torank(int k) {     int r = (k % 4) ? k / 4 + 1 : k / 4;     if (r <= 8) return (char)(r + 49);     if (r == 9) return  T ;     if (r == 10) return  J ;     if (r == 11) return  Q ;     if (r == 12) return  K ;     if (r == 13) return  A ;   }   char tosuit(int k) {     int r = k % 4;     if (r == 0) return  S ;     if (r == 1) return  C ;     if (r == 2) return  D ;     if (r == 3) return  H ;   }   inline bool replacee(int j, int k) {     if (J[j][1] == 0) return false;     A[J[j][1]][J[j][2]][0] = torank(k);     A[J[j][1]][J[j][2]][1] = tosuit(k);     return true;   }   string print(int k) {     char A[3];     A[0] = torank(k);     A[1] = tosuit(k);     A[2] =   0 ;     string str(A);     return str;   }   void printt() {     for (int i = 1; i <= n; i++) {       for (int j = 1; j <= m; j++) cout << A[i][j][0] << A[i][j][1] <<    ;       cout << endl;     }     cout << endl;   }   int main() {     bool rep1, rep2;     cin >> n >> m;     for (int i = 1; i <= n; i++)       for (int j = 1; j <= m; j++) {         cin >> s;         A[i][j].assign(s);         if (s[0] ==  J ) {           if (s[1] ==  1 ) {             J[1][1] = i;             J[1][2] = j;           } else if (s[1] ==  2 ) {             J[2][1] = i;             J[2][2] = j;           }         }         B[tonum(s[0]) * 4 + tonum(s[1])] = true;       }     size = n * m;     for (int i = 1; i <= 52; i++)       if (!B[i]) U[us++] = i;     for (int i = 0; i < us; i++)       for (int j = 0; j < us; j++)         if (i != j) {           rep1 = replacee(1, U[i]);           rep2 = replacee(2, U[j]);           if (check()) {             cout <<  Solution exists.  << endl;             if (!rep1 && !rep2)               cout <<  There are no jokers.  << endl;             else if (rep1 && rep2)               cout <<  Replace J1 with   << print(U[i]) <<   and J2 with                      << print(U[j]) <<  .  << endl;             else if (rep1)               cout <<  Replace J1 with   << print(U[i]) <<  .  << endl;             else if (rep2)               cout <<  Replace J2 with   << print(U[j]) <<  .  << endl;             cout <<  Put the first square to (  << r1 <<  ,   << c1 <<  ).                   << endl;             cout <<  Put the second square to (  << r2 <<  ,   << c2 <<  ).                   << endl;             return 0;           }         }     cout <<  No solution.  << endl;     return 0;   }