#include #include using namespace std; using ll = long long; using mint = atcoder::modint998244353; int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; vector a(n); for(auto &&v : a) cin >> v; sort(a.begin(), a.end()); mint ans; if(n % 2 == 0){ array cnt{}; for(auto &&c : a) cnt[c - '0']++; string b; for(int i = 0; i < 10; i++){ if(cnt[i] & 1){ b += i + '0'; cnt[i]--; } } if(b.empty()){ cout << "0\n"; return 0; } for(int i = 0; i < 10; i++){ if(cnt[i] >= 1){ b += i + '0'; cnt[i]--; break; } } for(int i = 9; i >= 0; i--){ if(cnt[i] >= 1){ b += i + '0'; cnt[i]--; break; } } int m = b.size(); auto dfs = [&](auto dfs, int S, ll v) -> ll { if(__builtin_popcount(S) == m) return abs(v); ll mn = 1ll << 60; for(int i = 0; i < m; i++){ if(S >> i & 1) continue; for(int j = 0; j < m; j++){ if(S >> j & 1) continue; if(i == j) continue; mn = min(mn, dfs(dfs, S | (1 << i) | (1 << j), v * 10 + ((int)(b[i] - '0') - (int)(b[j] - '0')))); mn = min(mn, dfs(dfs, S | (1 << i) | (1 << j), v * 10 + ((int)(b[j] - '0') - (int)(b[i] - '0')))); } } return mn; }; ans = dfs(dfs, 0, 0); }else{ mint v0, v1; for(int i = 0; i < (n + 1) / 2; i++){ v0 *= 10; v0 += a[i] - '0'; } for(int i = 0; i < n / 2; i++){ v1 *= 10; v1 += a.rbegin()[i] - '0'; } ans = v0 - v1; } cout << ans.val() << '\n'; }