1. #include<stdio.h>
  2. struct card
  3. {
  4. char rank,suite;
  5. };
  6.  
  7. struct card c[5],temp;
  8. int ranks[14],suites[17];
  9. int main(void)
  10. {
  11. char t,i,j,k,in_seq=0,same_suit=0,flag,in[3];
  12. scanf("%d",&t);
  13. //cout<<"\nt="<<t;
  14. while(t--)
  15. {
  16. //cout<<"\nt in while ="<<t;
  17. for(i=0;i<14;i++)
  18. ranks[i]=0;
  19. suites[0]=suites[1]=suites[5]=suites[16]=0;
  20. flag=in_seq=same_suit=0;
  21. //cout<<"\n1. t="<<t;
  22. fflush(stdin);
  23. for(i=0;i<5;i++)
  24. {
  25. //cout<<"\n0. t="<<t;
  26. scanf("%s",&in);
  27. //cout<<"\n"<<in;
  28. if(in[0]>='2' && in[0]<='9')
  29. c[i].rank=in[0]-'0';
  30. else if(in[0]=='A')
  31. c[i].rank=1;
  32. else if(in[0]=='T')
  33. c[i].rank=10;
  34. else if(in[0]=='J')
  35. c[i].rank=11;
  36. else if(in[0]=='Q')
  37. c[i].rank=12;
  38. else if(in[0]=='K')
  39. c[i].rank=13;
  40. ranks[c[i].rank-1]++;
  41. c[i].suite=in[1];
  42. suites[c[i].suite-'C']++;
  43. //cout<<"\n3. t="<<t;
  44. //sort according to rank
  45. for(j=0;j<i;j++)
  46. if(c[j].rank>c[i].rank)
  47. break;
  48. if(j<i)
  49. {
  50. temp=c[i];
  51. for(k=i;k>j;k--)
  52. c[k]=c[k-1];
  53. c[j]=temp;
  54. }
  55. }
  56. //cout<<"\n2. t="<<t;
  57. //cout<<"\nafter sort: \n";
  58. //for(i=0;i<5;i++)
  59. //cout<<(int)c[i].rank<<c[i].suite<<" ";
  60. //cards in sorted rank
  61. //check for same suit
  62. if(suites[0]==5||suites[1]==5||suites[5]==5||suites[16]==5)
  63. same_suit=1;
  64. //check for sequence
  65. for(i=1;i<5;i++)
  66. if(c[i].rank!=c[i-1].rank+1)
  67. break;
  68. if(i==5)
  69. in_seq=1;
  70. //cout<<"\nin_seq="<<(int)in_seq<<" same_suit="<<(int)same_suit<<"\n";
  71. //royal flush
  72. if( (c[0].rank==1&&c[1].rank==10&&c[2].rank==11&&c[3].rank==12&&c[4].rank==13))
  73. {
  74. if(same_suit)
  75. printf("royal flush\n");
  76. else printf("straight\n");
  77. flag=1;
  78. }
  79. else if(in_seq&&same_suit)
  80. {
  81. printf("straight flush\n");
  82. flag=1;
  83. }
  84. else
  85. {
  86. for(i=0;i<5;i++)
  87. if(ranks[c[i].rank-1]==4)
  88. break;
  89. if(i<5)
  90. {
  91. printf("four of a kind\n");
  92. flag=1;
  93. }
  94. }
  95. if(!flag)
  96. {
  97. for(i=0;i<5;i++)
  98. if(ranks[c[i].rank-1]==3)
  99. break;
  100. if(i<5)
  101. {
  102. for(i=0;i<5;i++)
  103. if(ranks[c[i].rank-1]==2)
  104. break;
  105. if(i<5)
  106. {
  107. printf("full house\n");
  108. flag=1;
  109. }
  110. }
  111. }
  112. if(!flag&&same_suit)
  113. {
  114. printf("flush\n");
  115. flag=1;
  116. }
  117. else if(!flag&&in_seq)
  118. {
  119. printf("straight\n");
  120. flag=1;
  121. }
  122. else if(!flag)
  123. {
  124. for(i=0;i<5;i++)
  125. if(ranks[c[i].rank-1]==3)
  126. break;
  127. if(i<5)
  128. {
  129. printf("three of a kind\n");
  130. flag=1;
  131. }
  132. }
  133. if(!flag)
  134. {
  135. for(i=0;i<14;i++)
  136. if(ranks[i]==2)
  137. break;
  138. if(i<14)
  139. {
  140. for(j=0;j<14;j++)
  141. if(j!=i&&ranks[j]==2)
  142. break;
  143. if(j<14)
  144. {
  145. printf("two pairs\n");
  146. flag=1;
  147. }
  148. }
  149. }
  150. if(!flag)
  151. {
  152. for(i=0;i<5;i++)
  153. if(ranks[c[i].rank-1]==2)
  154. break;
  155. if(i<5)
  156. {
  157. printf("pair\n");
  158. flag=1;
  159. }
  160. }
  161. if(!flag)
  162. printf("high card\n");
  163. //cout<<"\nt="<<t;
  164. }
  165. return 0;
  166. }