#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; template bool nextBitset(bitset &bs, int digit) { if(bs.none()) return false; bitset x, y, z; x = bs.to_ulong() & (~(bs.to_ulong()) + 1ULL); y = bs.to_ulong() + x.to_ulong() + 0ULL; z = bs & ~y; if(bs[digit-1] && bs == z) return false; bs = ((z.to_ulong() / x.to_ulong()) >> 1) + 0ULL; bs |= y; return true; } int main() { string s; cin >> s; int n = s.size(); vector dp((1< bs(x); for(int i=0; i bs2 = bs; bs2[i] = bs2[j] = bs2[k] = true; int score = (s[i] - '0') * 100 + (s[j] - '0') * 10 + (s[k] - '0'); dp[bs2.to_ulong()] = max(dp[bs2.to_ulong()], dp[x] + score); } } } } } cout << dp.back() << endl; return 0; }