#include using namespace std; #define rep(i,n) for(int i=0; i<(n); ++i) #define st first #define nd second #define pb push_back #define mp make_pair typedef vector vi; typedef pair pii; typedef long long ll; vector > v; int tab[1000005]; int f(int rule); int count_rank[20], count_suit[20]; int modif = 0, last = 0; int sito(){ for(int i = 2; i <= 1000; i ++){ if(tab[i]) continue; for(int j = i * i; j <= 1000000; j += i) tab[j] = i; } } int SUIT(char D){ if(D == 'D') return 1; if(D == 'H') return 2; if(D == 'C') return 3; if(D == 'S') return 4; } int RANK(char R){ if('0' <= R and R <= '9') return R - '0'; if(R == 'J') return 11; if(R == 'Q') return 12; if(R == 'K') return 13; if(R == 'A') return 14; } int score(int r){ if(r < 10) return r; return 10; } long long value = 0; int rule1(){ value ++; value += count_rank[11] * score(v[0].first); return 1; } int rule2(){ for(int i = 1; i <= 4; i ++){ if(count_suit[i] >= 2){ value *= 2; return 2; } } return 0; } int rule3(){ for(int i = 1; i <= 4; i ++){ if(count_suit[i] == 0) return 0; } value *= 2; return 3; } int rule4(){ int bl = count_suit[3] + count_suit[4]; int wh = count_suit[1] + count_suit[2]; if(bl == wh) return 0; value += abs(bl - wh); return 4; } int rule5(){ if(value%2) return 0; int x = value; for(int i = 1; i <= x; i ++) if(x%i == 0) value += i; return 5; } int rule6(){ if(count_rank[7] != 4) return 0; value -= 11*11; return 6; } int rule7(){ if(value < 0) return 0; int mini = 10; for(int i = 0; i < 5; i ++){ mini = min(mini,score(v[i].first)); } value += mini; return 7; } int rule8(){ if(value >= 0) return 0; value *= -1; return 8; } int rule9(){ if(count_suit[1] < 3) return 0; value ++; for(int i = 0; i < 5; i ++){ int r = v[i].first; if(r == 2){ count_rank[2] --; count_rank[5] ++; v[i].first = 5; continue; } if(r == 5){ count_rank[5] --; count_rank[2] ++; v[i].first = 2; continue; } if(r == 6){ count_rank[6] --; count_rank[9] ++; v[i].first = 9; continue; } if(r == 9){ count_rank[9] --; count_rank[6] ++; v[i].first = 6; continue; } } return 9; } int rule10(){ vector z; for(int i = 0; i < 5; i ++){ z.pb(v[i].first); } sort(z.begin(), z.end()); for(int i = 0; i < 4; i ++) if(z[i+1] - z[i] != 1) return 0; value += 5*count_rank[14]; return 10; } int rule11(){ if(modif <= 8) return 0; value += __builtin_popcountll(value); return 11; } int rule12(){ if(count_rank[2] == 0) return 0; f(last); return 12; } int rule13(){ if(count_rank[2] == 0) return 0; assert(value <= 1000000); value += value; return 13; } int f(int rule){ switch (rule){ case 1:return rule1(); case 2:return rule2(); case 3:return rule3(); case 4:return rule4(); case 5:return rule5(); case 6:return rule6(); case 7:return rule7(); case 8:return rule8(); case 9:return rule9(); case 10:return rule10(); case 11:return rule11(); case 12:return rule12(); case 13: return rule13(); } } void solve() { int n = 5; string p; sito(); for(int i = 0; i < 5; i ++){ cin >> p; if(p.size() == 2) v.pb(mp(RANK(p[0]), SUIT(p[1]))); else v.pb(mp(10, SUIT(p[2]))); int rank = v.back().first, suit = v.back().second; value += score(rank); count_rank[rank] ++; count_suit[suit] ++; } for(int i = 1; i <= 13; i ++){ int w = f(i); if(w != 0) { modif ++; last = i; } } printf("%lld\n", value); } int main(){ solve(); return 0; }