import java.util.*; public class Main { static String line = "YX2AKQJT9876543"; public static void main(String[] args) { Scanner in =new Scanner(System.in); int n = in.nextInt(); in.nextLine(); for(int i =0;i<n;i++) { String play1 = in.nextLine(); String[] c1 = play1.split(""); ArrayList<String> card1 = new ArrayList<String>(Arrays.asList(c1)); String play2 = in.nextLine(); String[] c2 = play2.split(""); ArrayList<String> card2 = new ArrayList<String>(Arrays.asList(c2)); System.out.println(battle(card1,card2,"")); } } public static String battle(ArrayList<String> CARD1,ArrayList<String> CARD2,String a) { ArrayList<String> card1 = (ArrayList<String>)CARD1.clone(); ArrayList<String> card2 = (ArrayList<String>)CARD2.clone(); ArrayList<String> choise = new ArrayList<String> (); String[] cl = a.split(""); ArrayList<String> cardlist = new ArrayList<String>(Arrays.asList(cl)); 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(a.length()==0) { for(String s :choise) { card1=chupai(card1,s); if(card1.size()==0) { return "Yes"; } String result = battle(card2,card1,s); card1 = (ArrayList<String>)CARD1.clone(); card2 = (ArrayList<String>)CARD2.clone(); if(result.equals("Yes")) { continue; }else { return "Yes"; } } }else { for(String s :choise) { char fir1 = s.charAt(0); char fir2 = a.charAt(0); int loc1 = line.indexOf(fir1); int locs = line.indexOf(fir2); if(fir1<fir2) { card1=chupai(card1,s); if(card1.size()==0) { return "Yes"; } String result = battle(card2,card1,s); card1 = (ArrayList<String>)CARD1.clone(); card2 = (ArrayList<String>)CARD2.clone(); 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))); } 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) { ArrayList<String> card = (ArrayList<String>)card0.clone(); ArrayList<String> choise = new ArrayList<String>(); if(mode.equals("one")) { for(int i =0;i<card.size();i++) { if(!choise.contains(card.get(i))) { choise.add(card.get(i)); } } }else if(mode.equals("two")) { int loc=0; while(iftwo(card)) { try { if(card.get(loc).equals(card.get(loc+1))) { if(!choise.contains(card.get(loc)+card.get(loc))) { choise.add(card.get(loc)+card.get(loc)); } card.remove(loc); card.remove(loc); loc=-1; } }catch(Exception ex) { }finally{ loc++; } } }else if(mode.equals("three")) { int loc=0; while(ifthree(card)) { try { if(card.get(loc).equals(card.get(loc+1)) && card.get(loc).equals(card.get(loc+2))) { choise.add(card.get(loc)+card.get(loc)+card.get(loc)); card.remove(loc); card.remove(loc); card.remove(loc); loc=-1; } }catch(Exception ex) { }finally{ loc++; } } }else if(mode.equals("threewithone")) { if(ifthreewithone(card)) { ArrayList<String> copy =new ArrayList<String>(); for(int i =0;i<card.size();i++) { copy.add(card.get(i)); } 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))) { String s = card.get(i)+card.get(i)+card.get(i); String body = card.get(i); copy.remove(i); copy.remove(i); copy.remove(i); for(int j =0;j<copy.size();j++) { if(!(copy.get(j).equals(body))) { if(choise.contains(s+copy.get(j))) { continue; } choise.add(s+copy.get(j)); } } copy.clear(); for(int j =0;j<card.size();j++) { copy.add(card.get(j)); } } }catch(Exception ex) { } } } }else if(mode.equals("threewithtwo")) { if(ifthreewithtwo(card)) { ArrayList<String> copy =new ArrayList<String>(); for(int i =0;i<card.size();i++) { copy.add(card.get(i)); } 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))) { String s = card.get(i)+card.get(i)+card.get(i); String body = card.get(i); copy.remove(i); copy.remove(i); copy.remove(i); for(int j =0;j<copy.size();j++) { try { if(copy.get(j).equals(copy.get(j+1)) && (!copy.get(j).equals(body))) { if(choise.contains(s+copy.get(j)+copy.get(j))) { continue; } choise.add(s+copy.get(j)+copy.get(j)); } }catch(Exception ex) { } } copy.clear(); for(int j =0;j<card.size();j++) { copy.add(card.get(j)); } } }catch(Exception ex) { } } } }else if(mode.equals("fourwithtwo")) { if(iffourwithtwo(card)) { ArrayList<String> copy =new ArrayList<String>(); for(int i =0;i<card.size();i++) { copy.add(card.get(i)); } 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))) { String s = card.get(i)+card.get(i)+card.get(i)+card.get(i); String body = card.get(i); copy.remove(i); copy.remove(i); copy.remove(i); copy.remove(i); for(int j =0;j<copy.size();j++) { if(!copy.get(j).equals(body)) { String first = copy.get(j); ArrayList<String> copycopy =new ArrayList<String>(); for(int l =0;l<copy.size();l++) { copycopy.add(copy.get(l)); } copycopy.remove(j); for(int l =0;l<copycopy.size();l++) { if(!copycopy.get(l).equals(body)) { if(!choise.contains(s+first+copycopy.get(l)) && !choise.contains(s+copycopy.get(l)+first)) { choise.add(s+first+copycopy.get(l)); } } } copycopy.clear(); for(int l =0;l<copy.size();l++) { copycopy.add(copy.get(l)); } } } copy.clear(); for(int j =0;j<card.size();j++) { copy.add(card.get(j)); } } }catch(Exception ex) { } } } }else if(mode.equals("boom")) { int loc=0; while(ifboom(card)) { try { if(card.get(loc).equals(card.get(loc+1)) && card.get(loc).equals(card.get(loc+2)) && card.get(loc).equals(card.get(loc+3))) { choise.add(card.get(loc)+card.get(loc)+card.get(loc)+card.get(loc)); card.remove(loc); card.remove(loc); card.remove(loc); card.remove(loc); loc=-1; } }catch(Exception ex) { }finally{ loc++; } } }else if(mode.equals("superboom")) { if(ifsuperboom(card)) { choise.add("YX"); } }else { ArrayList<ArrayList<String>> choiseall =new ArrayList<ArrayList<String>>(); choiseall.add(makechoise(card,"one")); choiseall.add(makechoise(card,"two")); choiseall.add(makechoise(card,"three")); choiseall.add(makechoise(card,"threewithone")); choiseall.add(makechoise(card,"threewithtwo")); choiseall.add(makechoise(card,"fourwithtwo")); choiseall.add(makechoise(card,"boom")); choiseall.add(makechoise(card,"superboom")); for(ArrayList<String> i :choiseall) { for(String j : i) { choise.add(j); } } } card0 = card; return choise; } } |
Double click to view unformatted code.