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 sys, time
from copy import copy, deepcopy as dcopy
from os import path
from collections import *
from heapq import *
from math import *

#################### Write your code here ######################

mod = 998244353

def mpow (a, b):
	ans = 1;
	while b :
		if (b & 1): ans = (ans * a) % mod;
		a = (a * a) % mod;
		b //= 2;
	return ans;


def solve (kkkk):
	n = inp();
	arr = ina();
	arr.sort();
	ans = 0;
	for i in range(2 * n):
		if (i < n) : ans -= arr[i];
		else : ans += arr[i];
	ans %= mod;
	ans += mod;
	ans %= mod; 
	fact = [1, 1];
	while (len(fact) < 2 * n + 5) :
		fact.append(fact[-1] * len(fact) % mod);
	inv = mpow(fact[n], mod - 2);
	inv = inv * inv % mod;
	ans *= inv;
	ans *= fact[2 * n];
	ans %= mod;
	out(ans)

def main():
    t = 1
    # t = inp()
    for i in range(t):	solve(i + 1)

############################# END ##############################
######################## DO NOT TOUCH ##########################

#--------------------- Local Setup Helper ---------------------#

localsys = 0
start_time = time.time()
if (path.exists('input.txt')):
    sys.stdin  = open("input.txt", "r")
    sys.stdout = open("output.txt","w")
    localsys = 1

#-------------------- I/O Functionalities ---------------------#

cin  = sys.stdin.readline
cout = sys.stdout.write
def inp(): return int(cin().strip())
def ins(): return list(cin().strip())
def inm(): return map(int, cin().strip().split())
def ina(): return list(map(int, cin().strip().split()))

def out  (a) : cout(str(a) + "\n")
def outa (a) : cout(" ".join(map(str, a)) + "\n")
def outm (a, b, c = None, d = None) :
	cout(str(a) + " " + str(b))
	if c != None : cout(" " + str(c))
	if d != None : cout(" " + str(d))
	cout("\n")

#---------------------- Code Initiator ------------------------#

main()
if localsys:
	print("\n\nTime Elapsed :",time.time() - start_time,"seconds")

################################################################