#include #include using namespace std; #define EPS (1e-10) #define REP(i,n) for (int i =0; i < (n);i++) typedef long double ld; typedef long long ll; typedef pair ii; typedef pair pdd; typedef vector vi; typedef vector vll; typedef vector vd; typedef vector vb; typedef vector > vvi; typedef vector vii; typedef vector vs; int color_order(string s) { if (s.length() == 3) return 10; else if (s[0] == 'Q') return 12; else if (s[0] == 'J') return 11; else if (s[0] == 'K') return 13; else if (s[0] == 'A') return 14; else return (s[0] - '0'); } int card_value(string s) { if (s.length() == 3) return 10; else if (s[0] == 'Q') return 10; else if (s[0] == 'J') return 10; else if (s[0] == 'K') return 10; else if (s[0] == 'A') return 10; else return (s[0] - '0'); } int rule1(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { val += 1; val += v[0] * cc[11]; return 1; } int rule2(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { for(int i = 0; i < 4; ++i) { if (c[i] >= 2) { val *= 2; return 1; } } return 0; } int rule3(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { bool ok = true; for(int i = 0; i < 4; ++i) { if (c[i] == 0) { ok = false; break; } } if (ok) { val *= 2; return 1; } else { return 0; } } int rule4(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { int a = c[2] + c[3]; int b = c[1] + c[0]; if (abs(a-b) != 0) { val += abs(a-b); return 1; } return 0; } int rule5(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { bool mod = false; if (val%2 == 0) { for(int i = 1; i <= val; ++i) { if (val%i == 0) { val += i; mod = true; } } } if (mod) return 1; else return 0; } int rule6(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { if (cc[7] == 4) { val -= 121; return 1; } return 0; } int rule7(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { if (val >= 0) { for(int i = 2; i <= 14;++i) { if (cc[i] > 0) { val += i; return 1; } } } return 0; } int rule8(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { if (val < 0) { val *= -1; return 1; } return 0; } int rule9(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { if (c[0] >= 3) { val += 1; int tmp; tmp = cc[6]; cc[6] = cc[9]; cc[9] = tmp; tmp = cc[2]; cc[2] = cc[5]; cc[5] = tmp; return 1; } return 0; } int rule10(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { bool straight = false; for(int i = 2; i <= 10; ++i) { for(int j = i; j <= i+4; ++j) { if (cc[j] >= 1) { break; } else { if (j == i+4) { straight = true; break; } } } } if (straight) { val += 5*cc[14]; return 1; } else { return 0; } } int rule11(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val, int rr) { bool mod = false; if (rr > 8) { int tmp = val; while(tmp > 0) { if (tmp%2 == 1) { val+=1; mod = true; } tmp /= 2; } } if(mod) return 1; else return 0; } int rule13(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val) { if (cc[2] > 0) { val *= 2; return 1; } return 0; } int rule12(vs &cards, vi &s, vi &v, vi &c, vi &cc, int &val, int lr, int rr) { if (cc[2] >= 1) { if (lr == 1) return rule1(cards, s, v, c, cc, val); if (lr == 2) return rule2(cards, s, v, c, cc, val); if (lr == 3) return rule3(cards, s, v, c, cc, val); if (lr == 4) return rule4(cards, s, v, c, cc, val); if (lr == 5) return rule5(cards, s, v, c, cc, val); if (lr == 6) return rule6(cards, s, v, c, cc, val); if (lr == 7) return rule7(cards, s, v, c, cc, val); if (lr == 8) return rule8(cards, s, v, c, cc, val); if (lr == 9) return rule9(cards, s, v, c, cc, val); if (lr == 10) return rule10(cards, s, v, c, cc, val); if (lr == 11) return rule11(cards, s, v, c, cc, val, rr); if (lr == 12) return rule12(cards, s, v, c, cc, val, lr, rr); if (lr == 13) return rule13(cards, s, v, c, cc, val); } } int main(int argc, char** argv) { ios::sync_with_stdio(false); vector cards(5); // v ~ values // c ~ colors // cc ~ card (value) count vi v(5, 0), c(4, 0), cc(15, 0); int val = 0; REP(i, 5) { cin >> cards[i]; v[i] = card_value(cards[i]); cc[color_order(cards[i])]++; val += v[i]; if (cards[i][cards[i].length() - 1] == 'D') c[0]++; if (cards[i][cards[i].length() - 1] == 'H') c[1]++; if (cards[i][cards[i].length() - 1] == 'C') c[2]++; if (cards[i][cards[i].length() - 1] == 'S') c[3]++; } // cout << val << endl; vi s = vi(); int rr = 0, last_mod, x; x = rule1(cards, s, v, c, cc, val); if (x > 0) last_mod = 1; rr += x; // cout << val << endl; x = rule2(cards, s, v, c, cc, val); if (x > 0) last_mod = 2; rr += x; // cout << val << endl; x = rule3(cards, s, v, c, cc, val); if (x > 0) last_mod = 3; rr += x; // cout << val << endl; x = rule4(cards, s, v, c, cc, val); if (x > 0) last_mod = 4; rr += x; // cout << val << endl; x = rule5(cards, s, v, c, cc, val); if (x > 0) last_mod = 5; rr += x; // cout << val << endl; x = rule6(cards, s, v, c, cc, val); if (x > 0) last_mod = 6; rr += x; // cout << val << endl; x = rule7(cards, s, v, c, cc, val); if (x > 0) last_mod = 7; rr += x; // cout << val << endl; x = rule8(cards, s, v, c, cc, val); if (x > 0) last_mod = 8; rr += x; // cout << val << endl; x = rule9(cards, s, v, c, cc, val); if (x > 0) last_mod = 9; rr += x; // cout << val << endl; x = rule10(cards, s, v, c, cc, val); if (x > 0) last_mod = 10; rr += x; // cout << val << endl; x = rule11(cards, s, v, c, cc, val, rr); if (x > 0) last_mod = 11; rr += x; // cout << 12 << " " << val << endl; x = rule12(cards, s, v, c, cc, val, last_mod, rr); if (x > 0) last_mod = 12; rr += x; // cout << val << endl; x = rule13(cards, s, v, c, cc, val); if (x > 0) last_mod = 13; rr += x; cout<< val << endl; return 0; }