#include <bits/stdc++.h>   using namespace std;   set<pair<char, char> > V;   char R[18][18], S[18][18];   int main(void) {     int n, m;     cin >> n >> m;     bool test1 = (n >= 6 && m >= 3) || (n >= 3 && m >= 6);     if (test1 == false) {       cout <<  No solution.  << endl;       return 0;     }     for (int i = 0; i < n; i++) {       for (int j = 0; j < m; j++) {         string w;         cin >> w;         R[i][j] = w[0];         S[i][j] = w[1];         V.insert(pair<char, char>(R[i][j], S[i][j]));       }     }     set<pair<char, char> > Q;     char TR[13] = { 2 ,  3 ,  4 ,  5 ,  6 ,  7 ,  8 ,                     9 ,  T ,  J ,  Q ,  K ,  A };     char TS[4] = { C ,  D ,  H ,  S };     for (int i = 0; i < 4; i++) {       for (int j = 0; j < 13; j++) {         if (V.find(pair<char, char>(TR[j], TS[i])) == V.end()) {           Q.insert(pair<char, char>(TR[j], TS[i]));         }       }     }     int jk1r, jk1c, jk2r, jk2c;     jk1r = jk1c = jk2r = jk2c = -1;     for (int i = 0; i < n; i++)       for (int j = 0; j < m; j++) {         if (R[i][j] ==  J  && S[i][j] ==  1 ) {           jk1r = i;           jk1c = j;         } else if (R[i][j] ==  J  && S[i][j] ==  2 ) {           jk2r = i;           jk2c = j;         }       }     for (int r1 = 0; r1 + 2 < n; r1++)       for (int c1 = 0; c1 + 2 < m; c1++) {         for (int r2 = 0; r2 + 2 < n; r2++)           for (int c2 = 0; c2 + 2 < m; c2++) {             bool test2 = (r2 <= r1 + 2) && (r1 <= r2 + 2) && (c2 <= c1 + 2) &&                          (c1 <= c2 + 2);             if (test2) continue;             for (int jr1 = 0; jr1 < 13; jr1++)               for (int js1 = 0; js1 < 4; js1++) {                 for (int jr2 = 0; jr2 < 13; jr2++)                   for (int js2 = 0; js2 < 4; js2++) {                     char cr1 = TR[jr1], cr2 = TR[jr2], cs1 = TS[js1],                          cs2 = TS[js2];                     if (jr1 == jr2 && js1 == js2) continue;                     if (Q.find(pair<char, char>(cr1, cs1)) == Q.end() ||                         Q.find(pair<char, char>(cr2, cs2)) == Q.end())                       continue;                     if (jk1r != -1) {                       R[jk1r][jk1c] = cr1;                       S[jk1r][jk1c] = cs1;                     }                     if (jk2r != -1) {                       R[jk2r][jk2c] = cr2;                       S[jk2r][jk2c] = cs2;                     }                     bool ok1 = true;                     for (int i = 0; i < 3; i++)                       for (int j = 0; j < 3; j++) {                         if (S[r1][c1] != S[r1 + i][c1 + j]) {                           ok1 = false;                           break;                         }                       }                     bool ok2 = true;                     bool used2[256];                     memset(used2, false, sizeof(used2));                     for (int i = 0; i < 3; i++)                       for (int j = 0; j < 3; j++) {                         if (used2[(int)R[r1 + i][c1 + j]]) {                           ok2 = false;                           break;                         }                         used2[(int)R[r1 + i][c1 + j]] = true;                       }                     bool ok3 = true;                     for (int i = 0; i < 3; i++)                       for (int j = 0; j < 3; j++) {                         if (S[r2][c2] != S[r2 + i][c2 + j]) {                           ok3 = false;                           break;                         }                       }                     bool ok4 = true;                     bool used4[256];                     memset(used4, false, sizeof(used4));                     for (int i = 0; i < 3; i++)                       for (int j = 0; j < 3; j++) {                         if (used4[(int)R[r2 + i][c2 + j]]) {                           ok4 = false;                           break;                         }                         used4[(int)R[r2 + i][c2 + j]] = true;                       }                     if ((ok1 || ok2) && (ok3 || ok4)) {                       cout <<  Solution exists.  << endl;                       if (jk1r == -1 && jk2r == -1) {                         cout <<  There are no jokers.  << endl;                       } else if (jk1r != -1 && jk2r != -1) {                         cout <<  Replace J1 with   << R[jk1r][jk1c]                              << S[jk1r][jk1c] <<   and  ;                         cout <<  J2 with   << R[jk2r][jk2c] << S[jk2r][jk2c]                              <<  .  << endl;                       } else if (jk1r != -1) {                         cout <<  Replace J1 with   << R[jk1r][jk1c]                              << S[jk1r][jk1c] <<  .  << endl;                       } else if (jk2r != -1) {                         cout <<  Replace J2 with   << R[jk2r][jk2c]                              << S[jk2r][jk2c] <<  .  << endl;                       }                       cout <<  Put the first square to (  << r1 + 1 <<  ,                              << c1 + 1 <<  ).  << endl;                       cout <<  Put the second square to (  << r2 + 1 <<  ,                              << c2 + 1 <<  ).  << endl;                       return 0;                     }                   }               }           }       }     cout <<  No solution.  << endl;     return 0;   }