#include #define REP(i, n) for(int (i)=0;(i)<(n);(i)++) using namespace std; #define ll long long char allRanks[] = "234567891JQKA"; char allSuits[] = "DHCS"; ll scoreOf(char c) { REP(i, 13) { if(allRanks[i] == c) { if(i < 9) return i + 2; else return 10; break; } } } ll suitNum(char c) { REP(i, 4) { if(allSuits[i] == c) return i; } } ll rankNum(char c) { REP(i, 13) { if(allRanks[i] == c) return i; } } int main() { char handRanks[5]; char handSuits[5]; REP(i, 5) { scanf(" %c%c", &(handRanks[i]), &(handSuits[i])); if(handSuits[i] == '0') scanf("%c", &(handSuits[i])); } ll score = 0; for(char rank : handRanks) { score += scoreOf(rank); } ll rulesApplied = 0; bool returnPls = false; //cout << score << endl; // 1 rulesApplied++; score++; ll countJs = 0; REP(i, 5) if(handRanks[i] == 'J') countJs++; score += countJs * scoreOf(handRanks[0]); //cout << score << endl; // 2 ll countSuit[4] = {}; REP(i, 5) { countSuit[suitNum(handSuits[i])]++; } REP(i, 5) { if(countSuit[suitNum(handSuits[i])] > 1) { score *= 2; rulesApplied++; break; } } //cout << score << endl; // 3 int count = 0; REP(i, 4) { if(countSuit[i]) count++; } if(count == 4) { rulesApplied++; score *= 2; } //cout << score << endl; // 4 int red = countSuit[0] + countSuit[1]; int black = countSuit[2] + countSuit[3]; if(abs(red - black)) rulesApplied++; score += abs(red - black); //cout << score << endl; // 5 if(score % 2 == 0) { rulesApplied++; ll add = 0; for(int i = 1; i*i <= score; i++) { if(score % i == 0) { add += i; if(i*i != score) add += score/i; } } } //cout << score << endl; // 6 ll countRank[13] = {}; REP(i, 5) { countRank[rankNum(handRanks[i])]++; } if(countRank[rankNum('7')] == 4) { rulesApplied++; score -= 121; } ll lastRuleChanged = 0; //cout << score << endl; // 7 pls7: if(score >= 0) { ll lowest = 10; REP(i, 5) { ll s = scoreOf(handRanks[i]); if(s < lowest) lowest = s; } rulesApplied++; lastRuleChanged = 7; score += lowest; } if(returnPls) goto pls; //cout << score << endl; // 8 pls8: if(score < 0) { score *= -1; lastRuleChanged = 8; rulesApplied++; } if(returnPls) goto pls; //cout << score << endl; // 9 pls9: if(countSuit[suitNum('D')] >= 3) { rulesApplied++; lastRuleChanged = 9; score += 1; REP(i, 5) { if(handRanks[i] == '6') { handRanks[i] = '9'; countRank[rankNum('6')]--; countRank[rankNum('9')]++; } else if(handRanks[i] == '9') { handRanks[i] = '6'; countRank[rankNum('9')]--; countRank[rankNum('6')]++; } if(handRanks[i] == '2') { handRanks[i] = '5'; countRank[rankNum('2')]--; countRank[rankNum('5')]++; } if(handRanks[i] == '5') { handRanks[i] = '2'; countRank[rankNum('5')]--; countRank[rankNum('2')]++; } } } if(returnPls) goto pls; //cout << score << endl; // 10 pls10: { ll consec = 0; REP(i, 13) { if(countRank[i]) consec++; else consec = 0; if(consec == 5) { if(countRank[rankNum('A')] > 0) { lastRuleChanged = 10; rulesApplied++; } score += countRank[rankNum('A')] * 5; break; } } } if(returnPls) goto pls; //cout << score << endl; // 11 pls11: if(rulesApplied > 8) { ll numBits = 0; for(ll vzor = 1; vzor < score; vzor <<= 1) { if(vzor & score) numBits++; } score += numBits; if(numBits > 0) { lastRuleChanged = 11; rulesApplied++;} } if(returnPls) goto pls; //cout << score << endl; // 12 if(countRank[rankNum('2')]) { returnPls = true; //cout << "LR" << lastRuleChanged << endl; switch(lastRuleChanged) { case 7: goto pls7; case 8: goto pls8; case 9: goto pls9; case 10: goto pls10; case 11: goto pls11; } } pls: //cout << score << endl; // 13 if(countRank[rankNum('2')]) { score *= 2; } cout << score << endl; }