#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
using namespace std;
const long long MOD = 998244353;
const long long INF = 0x7f7f7f7f7f7f7f7f;
const int INFi = 0x7f7f7f7f;
const long long N = 150001;
vector<long long> adj[N];
long long vis[N] = {};
int dx8[] = {0, 1, 1, 1, 0, -1, -1, -1}, dy8[] = {1, 1, 0, -1, -1, -1, 0, 1};
int dx4[] = {0, 1, 0, -1}, dy4[] = {1, 0, -1, 0};
int t = 1;
long long n, a[2 * N + 10], fact[2 * N + 10];
long long mult(long long a, long long b) { return (a % MOD * b % MOD) % MOD; }
long long add(long long a, long long b) { return (a % MOD + b % MOD) % MOD; }
long long subt(long long a, long long b) {
  return (a % MOD - b % MOD + MOD) % MOD;
}
long long fastModInv(long long x) {
  long long res = 1;
  long long y = MOD - 2;
  while (y) {
    if (y & 1) res = mult(res, x);
    y >>= 1;
    x = mult(x, x);
  }
  return res;
}
void MAIN() {
  cin >> n;
  long long ans = 0;
  for (long long i = 1; i <= 2 * n; i++) cin >> a[i], a[i] = 2 * a[i];
  sort(a + 1, a + 1 + 2 * n);
  long long val =
      (fact[2 * n - 1] * fastModInv(fact[2 * n - 1 - n + 1]) % MOD) *
      fastModInv(fact[n - 1]) % MOD;
  for (long long i = 1; i <= n; i++) ans = subt(ans, val * a[i] % MOD);
  for (long long i = n + 1; i <= 2 * n; i++) ans = add(ans, val * a[i] % MOD);
  cout << ans << "\n";
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << fixed;
  cout << setprecision(10);
  ;
  mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
  ;
  fact[0] = 1;
  for (long long i = 1; i <= 2 * N; i++) fact[i] = fact[i - 1] * i % MOD;
  while (t--) {
    MAIN();
  }
}
