int n; int a[kMaxN], p[kMaxN], fac[kMaxN], ifac[kMaxN], sum[kMaxN], f[kMaxN];
intqpow(int bs, int64_t idx = kMod - 2){ int ret = 1; for (; idx; idx >>= 1, bs = (int64_t)bs * bs % kMod) if (idx & 1) ret = (int64_t)ret * bs % kMod; return ret; }
inlineintadd(int x, int y){ return (x + y >= kMod ? x + y - kMod : x + y); } inlineintsub(int x, int y){ return (x >= y ? x - y : x - y + kMod); } inlinevoidinc(int &x, int y){ (x += y) >= kMod ? x -= kMod : x; } inlinevoiddec(int &x, int y){ (x -= y) < 0 ? x += kMod : x; }
intC(int m, int n){ if (m < n || m < 0 || n < 0) return0; return1ll * fac[m] * ifac[n] % kMod * ifac[m - n] % kMod; }
voidprework(){ fac[0] = 1; for (int i = 1; i <= 2 * n; ++i) fac[i] = 1ll * i * fac[i - 1] % kMod; ifac[2 * n] = qpow(fac[2 * n]); for (int i = 2 * n; i; --i) ifac[i - 1] = 1ll * i * ifac[i] % kMod; }
voiddickdreamer(){ std::cin >> n; for (int i = 1; i <= 2 * n; ++i) std::cin >> a[i]; std::sort(a + 1, a + 1 + 2 * n); prework(); int ans = 0; for (int i = 0; i <= 2 * n; ++i) sum[i] = add(C(2 * n, i), i <= 1 ? 0 : sum[i - 2]); for (int i = 1; i <= 2 * n; ++i) { int lim = std::min(i, n); f[i] = 1ll * lim * C(2 * n, i) % kMod; if (2 * lim - i - 1 >= 0) dec(f[i], sum[2 * lim - i - 1]); } for (int i = 1; i <= 2 * n; ++i) inc(ans, 1ll * (a[i] - a[i - 1]) * f[2 * n - i + 1] % kMod * fac[i - 1] % kMod * fac[2 * n - i + 1] % kMod); std::cout << 1ll * ans * ifac[2 * n] % kMod << '\n'; }