#include using namespace std; using lli = int64_t; auto ss = map{}; auto cs = map{}; lli score(const string & s) { for (auto r : { "J", "Q", "K", "A"}) if (s == r) return 10; return stoi(s); } lli apps = 0; lli last = 0; lli val = 0; using ft = void (*) (); vector fs; void lastcall() { //cout << last << '\n'; fs[last](); } void applyf (ft f, lli i) { auto ov = val; f(); if (ov != val) { apps++; last = i; } //cout << i << ' ' << val << '\n'; } auto c = array, 5>{}; int main() { for (int i = 0; i < 5; i++) { string t; cin >> t; c[i].second = t.back(); t.pop_back(); c[i].first = t; ss[c[i].second]++; cs[c[i].first]++; //cout << c[i].first << ' ' << c[i].second << '\n'; } for (auto && ci : c) val += score(ci.first); //cout << "sc0: " << val << '\n'; auto rule1 = [] { if (c.size() >= 4) { val += 1; val += cs["J"] * score(c[0].first); } }; auto rule2 = [] { for (auto && si : ss) if (si.second >= 2) { val *= 2; break; } }; auto rule3 = [] { for (auto s : {'D', 'H', 'C', 'S'}) if (ss[s] == 0) return; val *= 2; }; auto rule4 = [] { auto b = ss['C'] + ss['S']; auto r = ss['D'] + ss['H']; if (b != r) val += abs(b - r); }; auto rule5 = [] { if (val % 2 == 0) { for (lli i = 1; i <= val; i++) if (val % i == 0) val += i; } }; auto rule6 = [] { if (cs["7"] == 4) val -= 121; }; auto rule7 = [] { auto ms = lli(1111); if (val >= 0) { for (auto && ci : c) { auto sc = score(ci.first); ms = min(sc, ms); } val += ms; } }; auto rule8 = [] { if (val < 0) val *= -1; }; auto rule9 = [] { if (ss['D'] >= 3) { val += 1; for (auto && ci : c) { if (ci.first == "6") ci.first = "9"; else if (ci.first == "9") ci.first = "6"; else if (ci.first == "2") ci.first = "5"; else if (ci.first == "5") ci.first = "2"; } ss.clear(); cs.clear(); for (auto && ci : c) { cs[ci.first]++; ss[ci.second]++; } } }; auto rule10 = [] { /*TODO if (straight(c)) val += cs["A"] * 5; */ if (cs["10"] == 1 && cs["J"] == 1 && cs["Q"] == 1 && cs["K"] == 1 && cs["A"] == 1) val += 5; }; auto rule11 = [] { if (apps >= 8) { for (uint64_t v = val; v != 0; v >>= 1) { if (v % 2) val += 1; } } }; auto rule12 = [] { if (cs["2"] > 0) lastcall(); }; auto rule13 = [] { if (cs["2"] > 0) val += val; }; /* apply(rule1, 1); apply(rule2, 2); apply(rule3, 3); apply(rule4, 4); apply(rule5, 5); apply(rule6, 6); apply(rule7, 7); apply(rule8, 8); apply(rule9, 9); apply(rule10, 10); apply(rule11, 11); apply(rule12, 12); apply(rule13, 13); */ fs.push_back(rule1); fs.push_back(rule2); fs.push_back(rule3); fs.push_back(rule4); fs.push_back(rule5); fs.push_back(rule6); fs.push_back(rule7); fs.push_back(rule8); fs.push_back(rule9); fs.push_back(rule10); fs.push_back(rule11); fs.push_back(rule12); fs.push_back(rule13); for (lli i = 0; i < fs.size(); i++) applyf(fs[i], i); cout << val << '\n'; return 0; }