/* -*- 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; } bool gtv(vi &a, vi &b) { int al = a.size(), bl = b.size(), l = max(al, bl); for (int i = al - l, j = bl - l; i < al; i++, j++) { int da = (i >= 0) ? a[i] : 0; int db = (j >= 0) ? b[j] : 0; if (da != db) return (da > db); } return false; } vi min_even(int es[]) { int m = 0; for (int i = 1; i <= 9; i++) m += es[i]; if (m == 0) return vi(); vi minc(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 (gtv(minc, c)) minc = c; break; } return minc; } 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]]++; //for (int i = 1; i <= 9; i++) printf(" %d", es[i]); putchar('\n'); 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 ees[10]; for (int i = 1; i <= 9; i++) ees[i] = (es[i] & 1); minc = min_even(ees); //printv(minc); for (int i = 1; i <= 9; i++) if (es[i] >= 2) { ees[i] += 2; auto c = min_even(ees); //printv(c); if (gtv(minc, c)) minc = c; ees[i] -= 2; } } //printv(minc); int sum = 0; for (auto d: minc) sum = (sum * 10LL + d) % MOD; printf("%d\n", sum); return 0; }