You are given an array a of length 2n. Consider a partition of array a into two subsequences p and q of length n each (each element of array a should be in exactly one subsequence: either in p or in q).

Let's sort p in non-decreasing order, and q in non-increasing order, we can denote the sorted versions by x and y, respectively. Then the cost of a partition is defined as f(p, q) = ∑_{i = 1}^n |x_i - y_i|.

Find the sum of f(p, q) over all correct partitions of array a. Since the answer might be too big, print its remainder modulo 998244353.

Input

The first line contains a single integer n (1 ≤ n ≤ 150 000).

The second line contains 2n integers a_1, a_2, …, a_{2n} (1 ≤ a_i ≤ 10^9) — elements of array a.

Output

Print one integer — the answer to the problem, modulo 998244353.

Examples

Input


1
1 4


Output


6

Input


2
2 1 2 1


Output


12

Input


3
2 2 2 2 2 2


Output


0

Input


5
13 8 35 94 9284 34 54 69 123 846


Output


2588544

Note

Two partitions of an array are considered different if the sets of indices of elements included in the subsequence p are different.

In the first example, there are two correct partitions of the array a:

  1. p = [1], q = [4], then x = [1], y = [4], f(p, q) = |1 - 4| = 3; 
  2. p = [4], q = [1], then x = [4], y = [1], f(p, q) = |4 - 1| = 3. 



In the second example, there are six valid partitions of the array a: 

  1. p = [2, 1], q = [2, 1] (elements with indices 1 and 2 in the original array are selected in the subsequence p); 
  2. p = [2, 2], q = [1, 1]; 
  3. p = [2, 1], q = [1, 2] (elements with indices 1 and 4 are selected in the subsequence p); 
  4. p = [1, 2], q = [2, 1]; 
  5. p = [1, 1], q = [2, 2]; 
  6. p = [2, 1], q = [2, 1] (elements with indices 3 and 4 are selected in the subsequence p). 
import java.io.*;
import java.util.*;
public class Solution {
    static StringBuilder sb;
    static FastReader in;
    static long mod=1000000007;
    public static void main(String[] args) throws Exception {
        sb = new StringBuilder();
        in = new FastReader(System.in);
        int t = 1;
        while(t-->0)
            solve();
        System.out.print(sb);
    }
    static void solve()throws IOException {
        int i, j;
        int n=in.nextInt();
        long x=1;
        long a[]=new long[2*n];
        for(i=0;i<2*n;i++)
            a[i]=in.nextLong();
        sorter(a);
        long sum=0, m=998244353;
        for(i=0;i<n;i++)
            sum+=(a[i+n]-a[i]);
        sum=sum%m;
        long fac=1;
        for(i=1;i<=2*n;i++) {
            fac=(fac*(long)i)%m;
            if(i==n)
                x=fac;
        }
        long k=mul(mul(fac, power(x, m-2, m), m), power(x, m-2, m), m);
        long ans=mul(sum ,k, m);
        sb.append(ans+"\n");
    }
    static void sorter(long a[]) {
        ArrayList<Long> ar=new ArrayList<>();
        for(int i=0;i<a.length;i++)
            ar.add(a[i]);
        Collections.sort(ar);
        for(int i=0;i<ar.size();i++)
            a[i]=ar.get(i);
    }
    static long power(long x, long y, long p) {  
        long res = 1;       
        x = x % p;  
        if (x == 0) return 0;   
        while (y > 0) {
            if((y & 1)==1) 
                res = (res * x) % p;  
            y = y >> 1;  
            x = (x * x) % p;  
        } 
        return res%p; 
    }
    static long mul(long x, long y, long m) {long ans = x*y;return (ans>=m ? ans%m : ans);}
}
class Pair { 
    int x; 
    int y; 
    public Pair(int x, int y) 
    {
        this.x = x; 
        this.y = y; 
    } 
}
class sortbyX implements Comparator<Pair> { 
    public int compare(Pair a, Pair b) 
    { 
        return a.x - b.x; 
    } 
}
class FastReader {
    byte[] buf = new byte[2048];
    int index, total;
    InputStream in;
    FastReader(InputStream is) {
        in = is;
    }
    int scan() throws IOException {
        if (index >= total) {
            index = 0;
            total = in.read(buf);
            if (total <= 0) {
                return -1;
            }
        }
        return buf[index++];
    }
    String next() throws IOException {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        StringBuilder sb = new StringBuilder();
        for (; c > 32; c = scan()) {
            sb.append((char) c);
        }
        return sb.toString();
    }
    int nextInt() throws IOException {
        int c, val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+') {
            c = scan();
        }
        for (; c >= '0' && c <= '9'; c = scan()) {
            val = (val << 3) + (val << 1) + (c & 15);
        }
        return neg ? -val : val;
    }
    long nextLong() throws IOException {
        int c;
        long val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+') {
            c = scan();
        }
        for (; c >= '0' && c <= '9'; c = scan()) {
            val = (val << 3) + (val << 1) + (c & 15);
        }
        return neg ? -val : val;
    }
}
