import java.util.*; import java.io.*; public class Main { static String line = "YX2AKQJT9876543"; static String one = "one"; static String two = "two"; static String three = "three"; static String four = "four"; static String threewithone = "threewithone"; static String threewithtwo = "threewithtwo"; static String fourwithtwo = "fourwithtwo"; static String boom = "boom"; static String Yes = "Yes"; static String No = "No"; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); for(int i =0;i<n;i++) { ArrayList<String> card1 = new ArrayList<String>(Arrays.asList(br.readLine().split(""))); ArrayList<String> card2 = new ArrayList<String>(Arrays.asList(br.readLine().split(""))); System.out.println(battle(card1,card2,"")); } } public static String battle(ArrayList<String> card1,ArrayList<String> card2,String a) { ArrayList<String> choise = new ArrayList<String> (); ArrayList<String> cardlist = new ArrayList<String>(Arrays.asList(a.split(""))); if(a.length()==0) { choise = makechoise(card1,""); }else { if(cardlist.size()==1) { choise = makechoise(card1,one); }else if(cardlist.size()==2) { choise = makechoise(card1,two); }else if(cardlist.size()==3) { choise = makechoise(card1,three); }else if(cardlist.size()==4 && ifthreewithone(cardlist)) { choise = makechoise(card1,threewithone); }else if(cardlist.size()==4 && ifboom(cardlist)) { choise = makechoise(card1,boom); }else if(cardlist.size()==5 && ifthreewithone(cardlist)) { choise = makechoise(card1,threewithtwo); }else if(cardlist.size()==6 && iffourwithtwo(cardlist)) { choise = makechoise(card1,fourwithtwo); } } if(ifsuperboom(card1)) { choise.add("YX"); } if(a.length()==0) { String result; for(String s :choise) { chupai(card1,s); if(card1.size()==0) { huipai(card1,s); return Yes; } result = battle(card2,card1,s); huipai(card1,s); if(result.equals(Yes)) { continue; }else { return Yes; } } }else { int loc1 ; int loc2 ; String result; for(String s :choise) { loc1 = line.indexOf(s.charAt(0)); loc2 = line.indexOf(a.charAt(0)); if(loc1<loc2) { chupai(card1,s); if(card1.size()==0) { huipai(card1,s); return Yes; } result = battle(card2,card1,s); huipai(card1,s); if(result.equals(Yes)) { continue; }else { return Yes; } }else { continue; } } } String result = battle(card2,card1,""); if(result.equals(Yes)) { return No; }else { return Yes; } } public static ArrayList<String> huipai(ArrayList<String> card,String s){ for(int i =0;i<s.length();i++) { card.add(String.valueOf(s.charAt(i))); } Collections.sort(card); return card; } public static ArrayList<String> chupai(ArrayList<String> card,String s){ for(int i =0;i<s.length();i++) { card.remove(String.valueOf(s.charAt(i))); } return card; } public static boolean ifone(ArrayList<String> card) { if(card.size()>=1) { return true; }else { return false; } } public static boolean iftwo(ArrayList<String> card) { if(card.size()>=2) { for(int i =0;i<card.size();i++) { try { if(card.get(i).equals(card.get(i+1))) { return true; } }catch(Exception ex) { } } } return false; } public static boolean ifthree(ArrayList<String> card) { if(card.size()>=3) { for(int i =0;i<card.size();i++) { try { if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2))) { return true; } }catch(Exception ex) { } } } return false; } public static boolean ifthreewithone(ArrayList<String> card) { if(card.size()>=4) { for(int i =0;i<card.size();i++) { try { if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2))) { for(int j =0;j<card.size();j++) { if(!(card.get(j).equals(card.get(i)))) { return true; } } } }catch(Exception ex) { } } } return false; } public static boolean ifthreewithtwo(ArrayList<String> card) { if(card.size()>=5) { for(int i =0;i<card.size();i++) { try { if(card.get(i).equals(card.get(i)) && card.get(i).equals(card.get(i+2))) { for(int j =0;j<card.size();j++) { if(card.get(j).equals(card.get(j+1)) && !(card.get(j).equals(card.get(i)))) { return true; } } } }catch(Exception ex) { } } } return false; } public static boolean iffourwithtwo(ArrayList<String> card) { if(card.size()>=6) { for(int i =0;i<card.size();i++) { try { if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2)) && card.get(i).equals(card.get(i+3))) { return true; } }catch(Exception ex) { } } } return false; } public static boolean ifboom(ArrayList<String> card) { if(card.size()>=4) { for(int i =0;i<card.size();i++) { try { if(card.get(i).equals(card.get(i+1)) && card.get(i).equals(card.get(i+2)) && card.get(i).equals(card.get(i+3))) { return true; } }catch(Exception ex) { } } } return false; } public static boolean ifsuperboom(ArrayList<String> card) { if(card.size()>=2) { boolean ifx = false; boolean ify = false; for(int i =0;i<card.size();i++) { if(card.get(i).equals("X")) { ifx = true; } if(card.get(i).equals("Y")) { ify = true; } } if(ifx && ify) { return true; } } return false; } public static ArrayList<String> makechoise(ArrayList<String> card0,String mode) { Collections.sort(card0); StringBuffer sb = new StringBuffer(); ArrayList<String> choise = new ArrayList<String>(); if(mode.equals(one)) { for(int i =0;i<card0.size();i++) { if(!choise.contains(card0.get(i))) { choise.add(card0.get(i)); } } }else if(mode.equals(two)) { String s; for(int i =0;i<card0.size();i++) { try { if(card0.get(i).equals(card0.get(i+1))) { sb.delete(0,sb.length()); sb.append(card0.get(i)); sb.append(card0.get(i)); s = sb.toString(); if(!choise.contains(s)) { choise.add(s); } i+=1; } }catch(Exception ex) { } } }else if(mode.equals(three)) { String s; for(int i =0;i<card0.size();i++) { try { if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2))) { sb.delete(0,sb.length()); sb.append(card0.get(i)); sb.append(card0.get(i)); sb.append(card0.get(i)); s = sb.toString(); choise.add(s); i+=2; } }catch(Exception ex) { } } }else if(mode.equals(threewithone)) { if(ifthreewithone(card0)) { String s; String body; for(int i =0;i<card0.size();i++) { try { if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2))) { sb.delete(0,sb.length()); sb.append(card0.get(i)); sb.append(card0.get(i)); sb.append(card0.get(i)); s = sb.toString(); body = card0.get(i); card0.remove(i); card0.remove(i); card0.remove(i); String s1; for(int j =0;j<card0.size();j++) { if(!(card0.get(j).equals(body))) { sb.delete(0,sb.length()); sb.append(s); sb.append(card0.get(j)); s1=sb.toString(); if(!choise.contains(s1)) { choise.add(s1); } } } huipai(card0,s); i+=2; } }catch(Exception ex) { } } } }else if(mode.equals(threewithtwo)) { if(ifthreewithtwo(card0)) { String s; String body; for(int i =0;i<card0.size();i++) { try { if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2))) { sb.delete(0,sb.length()); sb.append(card0.get(i)); sb.append(card0.get(i)); sb.append(card0.get(i)); s = sb.toString(); body = card0.get(i); card0.remove(i); card0.remove(i); card0.remove(i); String s1; for(int j =0;j<card0.size();j++) { try { if(card0.get(j).equals(card0.get(j+1)) && (!card0.get(j).equals(body))) { sb.delete(0,sb.length()); sb.append(s); sb.append(card0.get(j)); sb.append(card0.get(j)); s1=sb.toString(); if(!choise.contains(s1)) { choise.add(s1); } j+=1; } }catch(Exception ex) { } } huipai(card0,s); i+=2; } }catch(Exception ex) { } } } }else if(mode.equals(fourwithtwo)) { if(iffourwithtwo(card0)) { String s; String body; for(int i =0;i<card0.size();i++) { try { if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2)) && card0.get(i).equals(card0.get(i+3))) { sb.delete(0,sb.length()); sb.append(card0.get(i)); sb.append(card0.get(i)); sb.append(card0.get(i)); sb.append(card0.get(i)); s = sb.toString(); body = card0.get(i); card0.remove(i); card0.remove(i); card0.remove(i); card0.remove(i); StringBuffer sb2 = new StringBuffer(); for(int j =0;j<card0.size();j++) { if(!card0.get(j).equals(body)) { String first = card0.get(j); card0.remove(j); String s1; String s2; for(int l =0;l<card0.size();l++) { if(!card0.get(l).equals(body)) { sb.delete(0,sb.length()); sb2.delete(0,sb.length()); sb.append(s); sb.append(first); sb.append(card0.get(l)); s1=sb.toString(); sb2.append(s); sb2.append(card0.get(l)); sb2.append(first); s2=sb.toString(); if(!choise.contains(s1) && !choise.contains(s2)) { choise.add(s1); } } } huipai(card0,first); } } huipai(card0,s); i+=3; } }catch(Exception ex) { } } } }else if(mode.equals(boom)) { for(int i =0;i<card0.size();i++) { try { if(card0.get(i).equals(card0.get(i+1)) && card0.get(i).equals(card0.get(i+2)) && card0.get(i).equals(card0.get(i+3))) { sb.delete(0,sb.length()); sb.append(card0.get(i)); sb.append(card0.get(i)); sb.append(card0.get(i)); sb.append(card0.get(i)); String s = sb.toString(); choise.add(s); i+=3; } }catch(Exception ex) { } } }else { ArrayList<ArrayList<String>> choiseall =new ArrayList<ArrayList<String>>(); choiseall.add(makechoise(card0,one)); choiseall.add(makechoise(card0,two)); choiseall.add(makechoise(card0,three)); choiseall.add(makechoise(card0,threewithone)); choiseall.add(makechoise(card0,threewithtwo)); choiseall.add(makechoise(card0,fourwithtwo)); choiseall.add(makechoise(card0,boom)); for(ArrayList<String> i :choiseall) { for(String j : i) { choise.add(j); } } } return choise; } } |
Double click to view unformatted code.