func_code_string: #include <bits/stdc++.h>   using namespace std;   string to_string(string c) { return string(c); }   string to_string(char ch) { return string(1, ch); }   template <size_t N>   string to_string(bitset<N> B) {     string second =   ;     for (long long i = 0; i < (long long)N; i++) second += (char) 0  + B[i];     return second;   }   template <typename T, typename U>   string to_string(pair<T, U> P) {     return  {  + to_string(P.first) +  ,  + to_string(P.second) +  } ;   }   template <typename T>   string to_string(T A) {     string second =  [ ;     bool first = 0;     for (auto x : A) {       if (first) second +=    ;       first = 1;       second += to_string(x);     }     return second +  ] ;   }   template <typename T, size_t N>   string to_string(T (&A)[N]) {     string second =  [ ;     bool first = 0;     for (long long i = 0; i < N; i++) {       if (first) second +=    ;       first = 1;       second += to_string(A[i]);     }     return second +  ] ;   }   void _deb() {     cerr <<  ]           <<   n ;   }   template <typename T, typename... U>   void _deb(const T& t, const U&... u) {     cerr << to_string(t);     if (sizeof...(u)) cout <<  ,  ;     _deb(u...);   }   long long ceil(long long a, long long b) {     return a / b + (a % b && (a ^ b) > 0);   }   long long floor(long long a, long long b) {     return a / b - (a % b && (a ^ b) < 0);   }   long long SBITS(long long n) { return __builtin_popcountll(n); }   long long BITS(long long n) { return 63 - __builtin_clzll(n); }   const long long MX = 3e5 + 5;   const long long OO = 1e18;   const long long MOD = 998244353;   long long DX[8] = {1, 0, -1, 0, 1, -1, 1, -1};   long long DY[8] = {0, 1, 0, -1, 1, -1, -1, 1};   long long FAC[MX];   long long FACINV[MX];   long long nCr(long long n, long long r) {     if (n < r) return 0;     return FAC[n] * FACINV[r] % MOD * FACINV[n - r] % MOD;   }   long long fastExp(long long base, long long expo, long long mod) {     if (expo == 0) return 1;     if (expo == 1) return base % mod;     long long t = fastExp(base, expo / 2, mod);     t = (t * t) % mod;     if (expo % 2 == 0)       return t;     else       return ((base % mod) * t) % mod;   }   void calcFact() {     FAC[1] = 1;     for (long long i = 2; i < MX; i++) FAC[i] = i * FAC[i - 1] % MOD;     FACINV[MX - 1] = fastExp(FAC[MX - 1], MOD - 2, MOD);     for (long long i = MX - 1; i > 0; i--) FACINV[i - 1] = i * FACINV[i] % MOD;   }   void solve() {     calcFact();     long long n, ans = 0;     cin >> n;     vector<long long> l(n), r(n);     for (long long i = 0; i < n; i++) cin >> l[i];     for (long long i = 0; i < n; i++) cin >> r[i];     sort(l.begin(), l.end());     sort(r.begin(), r.end());     reverse(r.begin(), r.end());     for (long long i = 0; i < n; i++) ans += abs(l[i] - r[i]);     ans %= MOD;     ans *= nCr(2 * n, n);     ans %= MOD;     cout << ans <<   n ;   }   int32_t main() {     ios::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     long long t = 1;     while (t--) solve();     return 0;   }   