#include using namespace std; #define fst(t) std::get<0>(t) #define snd(t) std::get<1>(t) #define thd(t) std::get<2>(t) #define unless(p) if(!(p)) #define until(p) while(!(p)) using ll = long long; using P = std::tuple; const int dx[8] = {-1, 1, 0, 0, -1, -1, 1, 1}, dy[8] = {0, 0, -1, 1, -1, 1, -1, 1}; int N, M; string S; vector v; int pn = 1, nn = 0; ll sum[1<<15], dp[1<<15][16]; ll rec(int state, int n){ if(state == 0 || n == 0){ return (state == 0 && n == 0) ? 0 : 1001001001001001001ll; } if(dp[state][n] != 1001001001001001001ll){ return dp[state][n]; } int x = state; while(x > 0){ ll v = sum[x] + rec(x ^ state, n - 1); if(dp[state][n] > v){ dp[state][n] = v; } x = (x - 1) & state; } return dp[state][n]; } int main(){ std::cin.tie(nullptr); std::ios::sync_with_stdio(false); std::cin >> N; cin.ignore(); getline(cin, S); for(int i=0;i> j & 1){ x = x * 10 + v[j]; } } sum[i] = x; } fill(&dp[0][0], &dp[0][0]+(1<<15)*16, 1001001001001001001ll); ll mx = 0; { deque deq(v.begin(), v.end()); for(int i=0;i 0){ deque deq(v.begin(), v.end()); for(int i=0;i