#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int arr = 1e6+1;
const ll mod = 1e9+7;
const ll maxv = 1e18+1;
#define fi first
#define se second
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define all(v) v.begin(), v.end()
#define no "NO\n"
#define yes "YES\n"
#define ld long double
#define mat vector<vector<ll>>
int m, n;
string board[18], h[2];
map<char, int> mark;
vector<ll> mask(4, 0);
ld four = 0, full = 0, straight = 0, sum = 0;
vector<pii> path;
int suittonum(char c){
if(c == 'd') return 1;
else if(c == 'h') return 2;
else if(c == 's') return 3;
return 0;
}
int valtonum(char c){
if(c == 'T') return 10;
else if(c == 'J') return 11;
else if(c == 'Q') return 12;
else if(c == 'K') return 13;
else if(c == 'A') return 1;
return (c - '0');
}
ld C(int n, int k){
if(k < 0 || k > n) return 0;
k = min(k, n-k);
ld res = 1;
for(int i = 1; i <= k; ++i){
res = res * (n - k + i) / i;
}
return res;
}
void Try(int id, int k, int start){
for(int idx = start; idx < 52; ++idx){
int i = idx/13;
int j = idx % 13;
if(mask[i] & (1ll << j)) continue;
mask[i] |= (1ll << j);
if(id == k){
bool valid = false;
/** 4 of a kind **/
for(int num = 0; num < 13; ++num){
int cnt = 0;
for(int s = 0; s < 4; ++s){
if(mask[s] & (1ll << num)) cnt++;
}
if(cnt == 4){
four++;
valid = true;
// cout << "4 of a kind " << num << endl;
break;
}
}
/** Full house **/
vi two, three;
for(int num = 0; num < 13; ++num){
int cnt = 0;
for(int s = 0; s < 4; ++s){
if(mask[s] & (1ll << num)) cnt++;
}
if(cnt >= 2) two.pb(num);
if(cnt >= 3) three.pb(num);
}
bool found = false;
for(int card : three){
if(found) break;
for(int card2 : two){
if(card != card2){
full++;
found = true;
valid = true;
break;
}
}
}
/** Straight flush **/
for(int s = 0; s < 4; ++s){
for(int num = 0; num < 10; ++num){
int cnt = ((mask[s] >> (num)) & 1);
cnt += ((mask[s] >> (num+1)) & 1);
cnt += ((mask[s] >> (num+2)) & 1);
cnt += ((mask[s] >> (num+3)) & 1);
if(num == 9) cnt += ((mask[s] >> 0) & 1);
else cnt += ((mask[s] >> (num+4)) & 1);
if(cnt == 5){
// cout << "Straight straight " << s << " " << num << endl;
straight++;
valid = true;
break;
}
}
}
if(valid) sum++;
}
else Try(id+1, k, idx+1);
mask[i] ^= (1ll << j);
}
}
void read(){
cin >> m;
cin >> h[0] >> h[1];
cin >> n;
for(int i = 0; i < n; ++i) cin >> board[i];
if(m == 1){
for(int i = 0; i < 2; ++i) mark[h[i][0]]++;
for(int i = 0; i < n; ++i) mark[board[i][0]]++;
double prob = 0;
for(auto id = mark.begin(); id != mark.end(); ++id)
if(id->second == 4) prob = 1;
cout << fixed << setprecision(15) << prob;
}
else if(m == 2){
double prob = 0;
int cnt3 = 0, cnt2 = 0, cnt4 = 0;
map<string, int> freq;
for(int i = 0; i < 2; ++i) mark[h[i][0]]++, freq[h[i]]++;
for(int i = 0; i < n; ++i) mark[board[i][0]]++, freq[board[i]]++;
for(auto id = mark.begin(); id != mark.end(); ++id){
if(id->second == 4) cnt4++;
else if(id->second == 2) cnt2++;
else if(id->second == 3) cnt3++;
}
if(cnt4 || cnt2 && cnt3) prob = 1;
for(int i = 1; i <= 10 && !prob; ++i){
for(int k = 0; k < 4; ++k){
char suit = 'c';
if(k == 1) suit = 'd';
else if(k == 2) suit = 'h';
else if(k == 3) suit = 's';
int cnt = 0;
for(int j = i; j <= i+4; ++j){
char c;
if(j == 10) c = 'T';
else if(j == 11) c = 'J';
else if(j == 12) c = 'Q';
else if(j == 13) c = 'K';
else if(j == 14 || j == 1) c = 'A';
else c = j + '0';
string tmp = "";
tmp += c; tmp += suit;
if(freq.find(tmp) != freq.end()) ++cnt;
}
if(cnt == 5){
prob = 1;
break;
}
}
}
cout << fixed << setprecision(15) << prob;
}
else if(m == 3 || m == 4 || m == 6 || m == 9 || m == 10 || m == 11){
for(int i = 0; i < 2; ++i){
int suit = suittonum(h[i][1]);
int val = valtonum(h[i][0]);
mask[suit] |= (1ll << (val-1));
}
int k = 0;
for(int i = 0; i < n; ++i){
if(board[i][0] == '?'){
++k;
continue;
}
int suit = suittonum(board[i][1]);
int val = valtonum(board[i][0]);
mask[suit] |= (1ll << (val-1));
}
int rest = 52 - (n + 2 - k);
ld choice = C(rest, k);
Try(1, k, 0);
ld prob;
if(m == 3) prob = four/choice;
else if(m == 4 || m == 6) prob = straight/choice;
else prob = sum/choice;
if(prob > 1.0) prob = 1.0;
cout << fixed << setprecision(15) << prob;
}
else if(m == 5){
}
else if(m == 7){
}
else if(m == 8){
}
else if(m == 12){
}
}
signed main(){
cin.tie(nullptr)->sync_with_stdio(false);
read();
return 0;
}