#include <bits/stdc++.h>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int card[2][2];
int com[7];
bool used[53];
int sec[5];
int sei[5];
int sev[5];

int getcard(string s){
	P rec;
	if(s[0]=='S')rec.first=0;
	if(s[0]=='D')rec.first=1;
	if(s[0]=='H')rec.first=2;
	if(s[0]=='C')rec.first=3;
	if(s[1]=='A')rec.second=0;
	if(s[1]=='K')rec.second=12;
	if(s[1]=='Q')rec.second=11;
	if(s[1]=='J')rec.second=10;
	if(s[1]=='T')rec.second=9;
	if('2'<=s[1] && s[1]<='9')rec.second=(s[1]-'2')+1;
	used[rec.first*13+rec.second]=true;
	return rec.first*13+rec.second;
}

P sc_max;

bool same_suit(){
	for(int i=1;i<5;i++){
		if((sec[0]/13)!=(sec[i]/13)){
			return false;
		}
	}
	return true;
}

int is_straight(){
	sort(sev,sev+5);
	if(sev[0]==0){
		for(int i=0;i<5;i++){
			if(sev[i]==0)sev[i]=13;
		}
		sort(sev,sev+5);
		reverse(sev,sev+5);
		bool fu=true;
		for(int i=0;i<4;i++){
			if(sev[i]!=(sev[i+1]+1))fu=false;
		}
		for(int i=0;i<5;i++){
			if(sev[i]==13)sev[i]=0;
		}
		if(fu)return 13;
		sort(sev,sev+5);
	}
	reverse(sev,sev+5);
	for(int i=0;i<4;i++){
		if(sev[i]!=(sev[i+1]+1))return -1;
	}
	return sev[0];
}


int ct[14];
int is_cts(int a,int b,int rest=1){
	memset(ct,0,sizeof(ct));
	for(int i=0;i<5;i++){
		if(sev[i]==0){
			ct[13]++;
		}else{
			ct[sev[i]]++;
		}
	}
	int res=-1;
	for(int i=13;i>=1;i--){
		if(ct[i]==a){
			if(res==-1)res=0;
			res*=13;
			res+=i;
			rest--;
		}
	}
	if(res==-1 || rest>0)return -1;
	int res2=-1;
	for(int i=13;i>=1;i--){
		if(ct[i]==b){
			res*=13;
			if(res2==-1)res2=0;
			res2*=13;
			res2+=i;
		}
	}
	if(res2==-1)return -1;
	return res+res2;
}

int order_id(){
	for(int i=0;i<5;i++){
		if(sev[i]==0)sev[i]=13;
	}
	sort(sev,sev+5);
	reverse(sev,sev+5);
	int res=0;
	for(int i=0;i<5;i++){
		res*=13;
		res+=sev[i];
	}
	for(int i=0;i<5;i++){
		if(sev[i]==13)sev[i]=0;
	}
	return res;
}

P calc(){
	//printf("9\n");
	if(same_suit() && is_straight()!=-1){
		return P(8,is_straight());
	}
	if(is_cts(4,1)!=-1){
		return P(7,is_cts(4,1));
	}
	if(is_cts(3,2)!=-1){
		return P(6,is_cts(3,2));
	}
	if(same_suit()){
		return P(5,order_id());
	}
	//printf("5\n");
	if(is_straight()!=-1){
		return P(4,is_straight());
	}
	if(is_cts(3,1)!=-1){
		return P(3,is_cts(3,1));
	}
	if(is_cts(2,1,2)!=-1){
		return P(2,is_cts(2,1,2));
	}
	//printf("3\n");
	if(is_cts(2,1,1)!=-1){
		return P(1,is_cts(2,1,1));
	}
	return P(0,order_id());
}

int co=0;

void dfs(int v,int c){
	if(c==5){
		co++;
		for(int i=0;i<5;i++){
			sec[i]=sei[i];
			sev[i]=sei[i]%13;
			//printf("%d ",sec[i]);
		}
		//printf("\n");
		sc_max=max(sc_max,calc());
	}else{
		for(int i=v;i<=7-(5-c);i++){
			sei[c]=com[i];
			dfs(i+1,c+1);
		}
	}
}

bool C(){
	com[5]=card[0][0];
	com[6]=card[0][1];
	sc_max=P(0,0);
	co=0;
	dfs(0,0);
	//printf("%d %d\n",sc_max.first,sc_max.second);
	P sc=sc_max;
	com[5]=card[1][0];
	com[6]=card[1][1];
	sc_max=P(0,0);
	dfs(0,0);
	//printf("%d %d\n",sc_max.first,sc_max.second);
	P sc2=sc_max;
	if(sc>sc2)return true;
	return false;
}



int main(void){
	while(1){
		memset(used,false,sizeof(used));
		string str;
		getline(cin,str);
		if(str=="#")break;
		card[0][0]=getcard(str.substr(0,2));
		card[0][1]=getcard(str.substr(3,5));
		getline(cin,str);
		card[1][0]=getcard(str.substr(0,2));
		card[1][1]=getcard(str.substr(3,5));
		getline(cin,str);
		com[0]=getcard(str.substr(0,2));
		com[1]=getcard(str.substr(3,5));
		com[2]=getcard(str.substr(6,8));
		int sum=0;
		int cnt=0;
		for(int i=0;i<52;i++){
			if(used[i])continue;
			used[i]=true;
			com[3]=i;
			for(int j=0;j<52;j++){
				if(used[j])continue;
				used[j]=true;
				com[4]=j;
				sum++;
				if(C())cnt++;
				used[j]=false;
			}
			used[i]=false;
		}
		printf("%.8f\n",(double)cnt/sum);
	}
	return 0;
} 


Measured memory_bytes: 3224