#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;

string suits = "CDHS";
string ranks = "23456789TJQKA";
int str2int(string &s){
    int res = 0;
    for(int i=0; i<4; i++){
        if(s[0]==suits[i]) res += i*13;
    }
    for(int i=0; i<13; i++){
        if(s[1]==ranks[i]) res += i;
    }
    return res;
}

vector<int> highest_hand(vector<int> a){
    vector<vector<bool>> c(4, vector<bool>(13, false));
    vector<int> suits(4, 0);
    vector<int> ranks(13, 0);
    for(int i=0; i<(int)a.size(); i++){
        int suit = a[i]/13;
        int rank = a[i]%13;
        c[suit][rank] = true;
        suits[suit]++;
        ranks[rank]++;
    }
    vector<vector<int>> n2r(5);
    for(int i=12; i>=0; i--){
        n2r[ranks[i]].push_back(i);
    }

    // (ロイヤル)ストレートフラッシュ
    for(int i=0; i<4; i++){
        for(int j=12; j>=3; j--){
            bool ok = true;
            for(int k=0; k<5; k++){
                int rank = (j-k>=0)? j-k: 12;
                if(!c[i][rank]){
                    ok = false;
                    break;
                }
            }
            if(ok) return {8, j};
        }
    }
    // フォーカード
    if(!n2r[4].empty()){
        for(int i=12; i>=0; i--){
            if(ranks[i]==0 or i==n2r[4][0]) continue;
            return {7, n2r[4][0], i};
        }
    }
    // フルハウス
    if(!n2r[3].empty() and (n2r[3].size() +n2r[2].size())>=2u){
        for(int i=12; i>=0; i--){
            if(i==n2r[3][0] or ranks[i]<2) continue;
            return {6, n2r[3][0], i};
        }
    }
    // フラッシュ
    for(int i=0; i<4; i++){
        if(suits[i] < 5) continue;
        vector<int> res{5};
        for(int j=12; j>=0; j--){
            if(c[i][j]) res.push_back(j);
            if((int)res.size() == 6) return res;
        }
    }
    // ストレート
    for(int i=12; i>=3; i--){
        bool ok = true;
        for(int j=0; j<5; j++){
            int rank = (i-j>=0)? i-j: 12;
            if(ranks[rank] == 0){
                ok = false;
                break;
            }
        }
        if(ok) return {4, i};
    }
    // スリーカード
    if(!n2r[3].empty()){
        return {3, n2r[3][0], n2r[1][0], n2r[1][1]};
    }
    // ツーペア
    if((int)n2r[2].size() >= 2){
        int rem = (n2r[2].size()>2u)? max(n2r[2][2], n2r[1][0]): n2r[1][0];
        return {2, n2r[2][0], n2r[2][1], rem};
    }
    // ワンペア
    if((int)n2r[2].size() == 1){
        return {1, n2r[2][0], n2r[1][0], n2r[1][1], n2r[1][2]};
    }
    vector<int> res{0};
    res.insert(res.end(), n2r[1].begin(), n2r[1].begin()+5);
    return res;
}

int main(){
    while(1){
        string tmp;
        cin >> tmp;
        if(tmp == "#") break;

        vector<int> c(7);
        c[0] = str2int(tmp);
        for(int i=1; i<7; i++){
            string in;
            cin >> in;
            c[i] = str2int(in);
        }
        vector<bool> used(52, false);
        for(int i=0; i<7; i++){
            used[c[i]] = true;
        }
        int total = 0;
        int wins = 0;
        for(int i=0; i<52; i++){
            for(int j=i+1; j<52; j++){
                if(used[i] or used[j]) continue;
                vector<int> a{c[0], c[1], c[4], c[5], c[6], i, j};
                vector<int> b{c[2], c[3], c[4], c[5], c[6], i, j};
                if(highest_hand(a) > highest_hand(b)) wins++;
                total++;
            }
        }
        cout << fixed << setprecision(10);
        cout << (double)wins/total << endl;
    }
    return 0;
}



Measured memory_bytes: 3180