/* -*- coding: utf-8 -*- * * 297.cc: No.297 カードの数式 - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 15; /* typedef */ typedef long long ll; typedef vector vl; /* global variables */ int ds[10], ds0[10]; /* subroutines */ /* main */ int main() { int n; cin >> n; int dn = 0, opn = 0, omn = 0; for (int i = 0; i < n; i++) { char ch; cin >> ch; if (ch == '+') opn++; else if (ch == '-') omn++; else ds[ch - '0']++, dn++; } int on = opn + omn; memcpy(ds0, ds, sizeof(ds)); int di = 0; vl v; for (int i = 0; i < on; i++) { while (ds[di] == 0) di++; v.push_back(di); ds[di]--; } ll maxd = 0; for (int di = 9; di >= 0;) { if (ds[di] > 0) maxd = maxd * 10 + di, ds[di]--; else di--; } v.push_back(maxd); //printf("maxd=%d\n", maxd); ll maxv = v[on]; for (int i = 0; i < on; i++) { if (i < opn) maxv += v[on - 1 - i]; else maxv -= v[on - 1 - i]; } ll minv; if (omn > 0) { minv = v[0]; for (int i = 0; i < on; i++) { if (i < opn) minv += v[i + 1]; else minv -= v[i + 1]; } } else { vl w(on + 1, 0); int wi = 0, di = 0; for (;;) { while (di <= 9 && ds0[di] == 0) di++; if (di > 9) break; w[wi] = w[wi] * 10 + di; ds0[di]--; wi = (wi + 1) % (on + 1); } minv = 0; for (int i = 0; i <= on; i++) minv += w[i]; } printf("%lld %lld\n", maxv, minv); return 0; }