#include using namespace std; #define int long long signed main(){ ios::sync_with_stdio( 0 ); int N; int plus = 0, minus = 0; static int cnt[ 10 ]; cin >> N; for( int i = 0; i < N; ++i ){ string s; cin >> s; if( s == "+" ){ ++plus; } else if( s == "-" ){ ++minus; } else{ ++cnt[ s[ 0 ] - '0' ]; } } int ans_max = 0, ans_min = 0; { deque< int > dq; for( int i = 0; i < 10; ++i ){ for( int j = 0; j < cnt[ i ]; ++j ){ dq.emplace_back( i ); } } while( dq.size() > plus + minus ){ ans_max = ans_max * 10 + dq.back(); dq.pop_back(); } for( int i = 0; i < plus; ++i ){ ans_max += dq.back(); dq.pop_back(); } for( int i = 0; i < minus; ++i ){ ans_max -= dq.front(); dq.pop_front(); } } if( minus ){ deque< int > dq; for( int i = 0; i < 10; ++i ){ for( int j = 0; j < cnt[ i ]; ++j ){ dq.emplace_back( i ); } } ans_min += dq.front(), dq.pop_front(); int x = 0; while( dq.size() >= plus + minus ){ x = x * 10 + dq.back(); dq.pop_back(); } ans_min -= x; --minus; for( int i = 0; i < plus; ++i ){ ans_min += dq.front(); dq.pop_front(); } for( int i = 0; i < minus; ++i ){ ans_min -= dq.back(); dq.pop_back(); } assert( dq.empty() ); } else{ deque< int > dq; for( int i = 0; i < 10; ++i ){ for( int j = 0; j < cnt[ i ]; ++j ){ dq.emplace_back( i ); } } vector< int > vec( plus + 1 ); int ptr = 0; while( not dq.empty() ){ int u = dq.back(); dq.pop_back(); vec[ ptr ] = vec[ ptr ] * 10 + u; ++ptr; if( ptr == vec.size() ){ ptr = 0; } } for( int i = 0; i < vec.size(); ++i ){ ans_min += vec[ i ]; } } cout << ans_max << " " << ans_min << endl; return 0; }