#include #define REP(i,s,n) for(int i=s;i> s; int n = s.size(); int answer = 0; rep(bit,(1< used(n,false); rep(i,n) if( (bit>>i) & 1 ) { used[i] = true; } for(int i=n-1;i>=0;--i) if( (bit>>i) & 1 ) { memset(cnt,0,sizeof cnt); REP(j,i+1,n) if( !used[j] && ( s[i] != s[j] ) ) { ++cnt[s[j]-'0']; } int num = -1; for(int j=9;j>=0;--j) if( cnt[j] >= 2 ) { num = j; break; } if( num == -1 ) continue; int step = 0; REP(j,i+1,n) if( !used[j] && (s[j]-'0') == num ) { if( step >= 2 ) break; used[j] = true; ++step; } cost += ( (s[i]-'0') * 100 + num * 10 + num ); } answer = max(answer,cost); } cout << answer << endl; return 0; }