/* -*- coding: utf-8 -*- * * 3363.cc: No.3363 Two Closest Numbers - yukicoder */ #include #include #include using namespace std; /* constant */ const int MAX_N = 200000; const int MOD = 998244353; /* typedef */ using vi = vector; /* global variables */ int cs[MAX_N], es[10]; /* subroutines */ void mknums(int es[], vi &a, vi &b) { int ds[10]; copy(es, es + 10, ds); for (int i = 0, j = 9; i <= j;) { while (i < 10 && ds[i] == 0) i++; while (j > 0 && ds[j] == 0) j--; if (i > j) break; a.push_back(i), ds[i]--; b.push_back(j), ds[j]--; } } vi subv(vi &a, vi &b) { // a >= b int n = a.size(); vi c(n); for (int i = n - 1, co = 0; i >= 0; i--) { c[i] = a[i] - b[i] - co; if (c[i] < 0) c[i] += 10, co = 1; else co = 0; } return c; } void printv(vi &a) { for (auto d: a) printf("%d", d); putchar('\n'); } /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", cs + i); for (int i = 0; i < n; i++) es[cs[i]]++; vi minc; if (n & 1) { int mn = 1; while (es[mn] == 0) mn++; vi a, b; a.push_back(mn); es[mn]--; b.push_back(0); mknums(es, a, b); minc = subv(a, b); //printv(a); printv(b); } else { int m = 0; for (int i = 1; i <= 9; i++) { es[i] &= 1; m += es[i]; } if (m > 0) { minc.assign(m / 2, 9); for (int i = 1; i <= 9; i++) if (es[i] > 0) for (int j = i + 1; j <= 9; j++) if (es[j] > 0) { es[i]--, es[j]--; vi a(1, j), b(1, i); mknums(es, a, b); es[i]++, es[j]++; vi c = subv(a, b); if (minc > c) minc = c; break; } } } //printv(minc); int sum = 0; for (auto d: minc) sum = (sum * 10LL + d) % MOD; printf("%d\n", sum); return 0; }