#include #include using namespace std; using isize = size_t; using i32 = int; using u32 = unsigned int; using i64 = long long; using u64 = unsigned long long; using i128 = __int128_t; using u128 = __uint128_t; using f64 = long double; using p2 = pair; using el = tuple; using mint = atcoder::modint998244353; void _main(); int main() { cin.tie(0); ios::sync_with_stdio(false); cout << fixed << setprecision(18); _main(); } void _main() { i64 n; cin >> n; vector c(n); for (i64 i = 0; i < n; i++) { cin >> c[i]; } if (n % 2 == 1) { sort(c.begin(), c.end()); i64 a = (n + 1) / 2; mint x = 0, y = 0; for (i64 i = 0; i < a; i++) { x = x * 10 + c[i]; } for (i64 i = n - 1; i >= a; i--) { y = y * 10 + c[i]; } cout << (x - y).val() << "\n"; return; } vector cnt(10, 0); for (i64 c : c) cnt[c] ^= 1; vector d; for (i64 i = 0; i < 10; i++) if (cnt[i] > 0) d.push_back(i); i64 ans = 1e18; for (i64 i = 0; i < d.size(); i++) { for (i64 j = i + 1; j < d.size(); j++) { for (i64 xx = 0; xx < 1 << d.size(); xx++) { i64 x = xx; i64 y = (1 << d.size()) - x - 1; x &= (1 << d.size()) - 1 - (1 << i) - (1 << j); y &= (1 << d.size()) - 1 - (1 << i) - (1 << j); if (__builtin_popcountll(x) != __builtin_popcountll(y)) continue; i64 u = d[i], v = d[j]; for (i64 k = d.size() - 1; k >= 0; k--) if (x >> k & 1) u = u * 10 + d[k]; for (i64 k = 0; k < d.size(); k++) if (y >> k & 1) v = v * 10 + d[k]; ans = min(ans, v - u); } } } cout << mint(ans).val() << "\n"; }