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.

import java.io.*;
import java.math.*;
import java.util.*;
import java.awt.geom.*;
import static java.lang.Math.*;

public class Solution implements Runnable{

	BufferedReader in;
	PrintWriter out;
	StringTokenizer st;

	private String next() throws Exception {
		if (st == null || !st.hasMoreTokens()) {
			String line=in.readLine().trim();
			while(line.length() == 0)
				line=in.readLine().trim();
			st = new StringTokenizer(line);
		}
		return st.nextToken();
	}

	private int nextInt() throws Exception {
		return Integer.parseInt(next());
	}
	private long nextLong() throws Exception {
		return Long.parseLong(next());
	}
	private double nextDouble() throws Exception {
		return Double.parseDouble(next());
	}

	public static void main(String[] args) {
		new Thread(null, new Solution(), "", (1<<25)).start();
	}

	public void run() {
		try {
			in = new BufferedReader(new InputStreamReader(System.in));
			out = new PrintWriter(System.out);
			solve();
		} catch (Exception e) {
			System.exit(777);
		} finally {
			out.close();
		}
	}
	
	class Card {
		int a, b;
		public Card(int a,int b) {
			this.a=a;
			this.b=b;
		}
	}
	
	class Answer {
		int r1,c1,r2,c2;
		public Answer(int r1,int c1,int r2,int c2) {
			this.r1=r1;
			this.r2=r2;
			this.c1=c1;
			this.c2=c2;
		}
		
		public void Print() {
			out.println("Put the first square to ("+r1+", "+c1+").");
			out.println("Put the second square to ("+r2+", "+c2+").");
		}
	}
	
	int to[];
	char from[];
	char from2[];
	Card a[][];
	boolean can[][];
	boolean mv[][];
	int n,m;
	int jx[];
	int jy[];
	int jno[];
	int jj;
	
	boolean can_fill(int i,int j,int ii,int jj) {
		int mv[][] = new int [n][m];
		for (int it1=i;it1<i+3;it1++)
			for (int it2=j;it2<j+3;it2++)
				mv[it1][it2]++;
		for (int it1=i;it1<ii+3;it1++)
			for (int it2=j;it2<jj+3;it2++) {
				mv[it1][it2]++;
				if (mv[it1][it2]>1) return false;
			}
		return true;
	}
	
	boolean solve2(int i,int j) {
		int d[] = new int [13];
		boolean ma[] = new boolean [4]; 
		boolean flag1=true,flag2=true;
		for (int ii=i;ii<i+3;ii++)
			for (int jj=j;jj<j+3;jj++) {
				d[a[ii][jj].a]++;
				if (d[a[ii][jj].a]>1) flag1=false;
				ma[a[ii][jj].b]=true;
			}
		int count=0;
		for (int ii=0;ii<4;ii++)
			if (ma[ii]) count++;
		flag2=(count<=1);
		return (flag1 || flag2);
	}
	
	Answer can_solve() {
		boolean may_solve[][]=new boolean[n][m];
		for (int i=0;i<n-2;i++)
			for (int j=0;j<m-2;j++)
				may_solve[i][j]=solve2(i,j);
		for (int i=0;i<n-2;i++)
			for (int j=0;j<m-2;j++)
				for (int ii=0;ii<n-2;ii++)
					for (int jj=0;jj<m-2;jj++)
						if (can_fill(i,j,ii,jj) && may_solve[i][j] && may_solve[ii][jj]) {
							return new Answer(ii+1,jj+1,i+1,j+1);
						}
		return null;
	}
	
	public void solve() throws Exception {
		to=new int[256];
		from=new char[256];
		from2=new char[256];
		to[(int)'2']=0; from[0]='2';
		to[(int)'3']=1; from[1]='3';
		to[(int)'4']=2; from[2]='4';
		to[(int)'5']=3; from[3]='5';
		to[(int)'6']=4; from[4]='6';
		to[(int)'7']=5; from[5]='7';
		to[(int)'8']=6; from[6]='8';
		to[(int)'9']=7; from[7]='9';
		to[(int)'T']=8; from[8]='T';
		to[(int)'J']=9; from[9]='J';
		to[(int)'Q']=10; from[10]='Q';
		to[(int)'K']=11; from[11]='K';
		to[(int)'A']=12; from[12]='A';
		to[(int)'C']=0;  from2[0]='C';
		to[(int)'D']=1;  from2[1]='D';
		to[(int)'H']=2;  from2[2]='H';
		to[(int)'S']=3;  from2[3]='S';
		can = new boolean [13][4];
		n=nextInt();
		m=nextInt();
		a = new Card[n][m];
		jx = new int [2];
		jy = new int [2];
		jno = new int [2];
		jj = 0;
		
		for (int i=0;i<n;i++)
			for (int j=0;j<m;j++) {
				String s = next();
				if (s.charAt(0)=='J') { //Joker
					a[i][j]=new Card(-1,-1);
					jy[jj]=i;
					jx[jj]=j;
					jno[jj]=s.charAt(1)-'0';
					jj++;
				} else {
					int aa=to[(int)s.charAt(0)];
					int bb=to[(int)s.charAt(1)];
					a[i][j]=new Card(aa,bb);
					can[aa][bb]=true;
				}
			}
		if (jj==0) {
			Answer cur=can_solve();
			if (cur!=null) {
				out.println("Solution exists.");
				out.println("There are no jokers.");
				cur.Print();
				return;
			}
		} else if (jj==1) {
			if (solve2(0,0)) out.println("YES");
			for (int i=0;i<13;i++)
				for (int j=0;j<4;j++)
					if (!can[i][j]) {
						a[jy[0]][jx[0]] = new Card(i,j);
						Answer cur=can_solve();
						if (cur!=null) {
							out.println("Solution exists.");
							out.println("Replace J"+jno[0]+" with "+from[i]+from2[j]+".");
							cur.Print();
							return;
						}
					}
		} else {
			for (int i=0;i<13;i++)
				for (int j=0;j<4;j++)
					for (int ii=0;ii<13;ii++)
						for (int jj=0;jj<4;jj++)
							if (!can[i][j] && !can[ii][jj]) {
								if (i==ii && j==jj) continue;
								a[jy[0]][jx[0]] = new Card(i,j);
								a[jy[1]][jx[1]] = new Card(ii,jj);
								Answer cur=can_solve();
								if (cur!=null) {
									out.println("Solution exists.");
									if (jno[0]==1)
										out.println("Replace J1 with "+from[i]+from2[j]+" and J2 with "+from[ii]+from2[jj]+".");
									else
										out.println("Replace J1 with "+from[ii]+from2[jj]+" and J2 with "+from[i]+from2[j]+".");
									cur.Print();
									return;
								}
								
							}
		}
		out.println("No solution.");

	}
}
