#include #define rep(i,s,n) for (int i = (int)(s); i < (int)(n); i++) #define reb(i,s,n) for (int i = (int)(n)-1; i >= (int)(s); i--) #define all(v) begin(v), end(v) using namespace std; using ll = long long; bool chmin(auto &a, auto b) { return a > b ? a = b, 1 : 0; } bool chmax(auto &a, auto b) { return a < b ? a = b, 1 : 0; } template ostream &operator<<(ostream &os, const vector &a){ if (a.empty()) return os; os << a.front(); for (auto e : a | views::drop(1)){ os << ' ' << e; } return os; } void dump(auto ...vs){ ((cout << vs << ' '), ...) << endl; } #include using mint = atcoder::modint998244353; void solve(){ int n; cin >> n; vector cnt(10); rep(i,0,n){ int x; cin >> x; cnt[x]++; } if (n % 2 == 1){ vector a; a.reserve(n); rep(i,0,10){ rep(t,0,cnt[i]){ a.emplace_back(i); } } mint big = 0; rep(i,0,n/2+1){ big *= 10; big += a[i]; } mint sml = 0; rep(i,0,n/2){ sml *= 10; sml += a[n-1-i]; } mint ans = big - sml; cout << ans.val() << '\n'; return ; } auto get_mi = [&](vector a){ sort(all(a)); int sz = a.size(); int mi = 1e9; do { int x = 0; rep(i,0,sz/2){ x *= 10; x += a[i]; } int y = 0; rep(i,0,sz/2){ y *= 10; y += a[sz/2+i]; } chmin(mi,abs(x-y)); }while(next_permutation(all(a))); return mi; }; vector a; rep(i,0,10){ if (cnt[i] % 2 == 1){ a.emplace_back(i); } } int mi = get_mi(a); rep(i,0,10){ if (cnt[i] % 2 == 0 && cnt[i] >= 2){ a.emplace_back(i); a.emplace_back(i); chmin(mi,get_mi(a)); a.pop_back(); a.pop_back(); } } mint ans = mi; cout << ans.val() << '\n'; } int main(){ cin.tie(0)->sync_with_stdio(0); solve(); }