记忆化搜索
dp【还剩下几个】【倒1】【倒2】【倒3】
CF JAVA中 public static class 前面好像不能再开类了,连注释掉的类也不可以,好像是个BUG???
/**
* Created by ckboss on 14-9-5.
*/
import java.util.*;
public class Solitaire {
static int[][][][] dp = new int[60][60][60][60];
static boolean[][][][] vis = new boolean[60][60][60][60];
static char[] c1=new char[60];
static char[] c2=new char[60];
static boolean check(int a,int b){
if((c1[a]==c1[b])||(c2[a]==c2[b]))
return true;
else return false;
}
static int dfs(int cur,int a,int b,int c){
if(vis[cur][a][b][c]==true)
return dp[cur][a][b][c];
vis[cur][a][b][c]=true;
if(cur==1)
return dp[cur][a][b][c] = 1;
if(cur==2){
if(check(a,b)==true){
return dp[cur][a][b][c] = 1;
}
else{
return dp[cur][a][b][c] = 0;
}
}
int ret=0;
if(check(a,b)==true){
ret=dfs(cur-1,a,c,cur-3);
}
if(ret==1){
return dp[cur][a][b][c] = 1;
}
if(check(a,cur-3)==true){
ret=dfs(cur-1,b,c,a);
}
return dp[cur][a][b][c]=ret;
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
for(int i=1;i<=n;i++){
String temp=in.next().trim();
c1[i]=temp.charAt(0);
c2[i]=temp.charAt(1);
}
if(n==1){
System.out.println("YES");
}
else if(dfs(n,n,n-1,n-2)==1){
System.out.println("YES");
}
else{
System.out.println("NO");
}
}
}