#include using namespace std; const long long MOD = 998244353; // cntの前or後ろからdigit桁取った数 long long make_num(const vector &cnt, int digit, bool reversed = false, long long st = 0) { long long res = st; if (!reversed) { for (int i = 1; i <= 9 && digit > 0; i++) { for (int j = 0; j < cnt[i] && digit > 0; j++) { res = res*10+i; digit--, res%=MOD; } } } else { for (int i = 9; i >= 1 && digit > 0; i--) { for (int j = 0; j < cnt[i] && digit > 0; j++) { res = res*10+i; digit--, res%=MOD; } } } return res; } int main() { int N; cin >> N; vector c(N), cnt(10); for (int i = 0; i < N; i++) cin >> c[i], cnt[c[i]]++; if (N%2 == 1) { // N = 2k+1 long long x = make_num(cnt, (N+1)/2), y = make_num(cnt, N/2, true); cout << (x-y+MOD)%MOD << endl; } else { // N = 2k long long ans = (1LL<<60); // inf vector c_subset; int sum = 0; for (int i = 1; i <= 9; i++) { if (cnt[i]%2 == 1) c_subset.push_back(i); } if (c_subset.size() == 0) { cout << 0 << endl; return 0; } do { string s; for (auto x : c_subset) s.push_back('0'+x); long long a = stoll(s.substr(0, s.size()/2)), b = stoll(s.substr(s.size()/2)); ans = min(ans, max(a, b)-min(a, b)); } while (next_permutation(c_subset.begin(), c_subset.end())); for (int i = 1; i <= 9; i++) { if (cnt[i] < cnt[i]%2+2) continue; vector c_subset2 = c_subset; c_subset2.push_back(i), c_subset2.push_back(i); sort(c_subset2.begin(), c_subset2.end()); do { string s; for (auto x : c_subset2) s.push_back('0'+x); long long a = stoll(s.substr(0, s.size()/2)), b = stoll(s.substr(s.size()/2)); ans = min(ans, max(a, b)-min(a, b)); } while (next_permutation(c_subset2.begin(), c_subset2.end())); } cout << ans%MOD << endl; } }