description: n people gathered to hold a jury meeting of the upcoming competition, the i-th member of the jury came up with a_i tasks, which they want to share with each other.
  
  First, the jury decides on the order which they will follow while describing the tasks. Let that be a permutation p of numbers from 1 to n (an array of size n where each integer from 1 to n occurs exactly once).
  
  Then the discussion goes as follows:
  
    * If a jury member p_1 has some tasks left to tell, then they tell one task to others. Otherwise, they are skipped. 
    * If a jury member p_2 has some tasks left to tell, then they tell one task to others. Otherwise, they are skipped. 
    * ... 
    * If a jury member p_n has some tasks left to tell, then they tell one task to others. Otherwise, they are skipped. 
    * If there are still members with tasks left, then the process repeats from the start. Otherwise, the discussion ends. 
  
  
  
  A permutation p is nice if none of the jury members tell two or more of their own tasks in a row. 
  
  Count the number of nice permutations. The answer may be really large, so print it modulo 998 244 353.
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 10^4) — the number of test cases.
  
  The first line of the test case contains a single integer n (2 ≤ n ≤ 2 ⋅ 10^5) — number of jury members.
  
  The second line contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 10^9) — the number of problems that the i-th member of the jury came up with.
  
  The sum of n over all test cases does not exceed 2 ⋅ 10^5.
  
  Output
  
  For each test case, print one integer — the number of nice permutations, taken modulo 998 244 353.
  
  Example
  
  Input
  
  
  4
  2
  1 2
  3
  5 5 5
  4
  1 3 3 7
  6
  3 4 2 1 3 3
  
  
  Output
  
  
  1
  6
  0
  540
  
  Note
  
  Explanation of the first test case from the example:
  
  There are two possible permutations, p = [1, 2] and p = [2, 1]. For p = [1, 2], the process is the following:
  
    1. the first jury member tells a task; 
    2. the second jury member tells a task; 
    3. the first jury member doesn't have any tasks left to tell, so they are skipped; 
    4. the second jury member tells a task. 
  
  
  
  So, the second jury member has told two tasks in a row (in succession), so the permutation is not nice.
  
  For p = [2, 1], the process is the following:
  
    1. the second jury member tells a task; 
    2. the first jury member tells a task; 
    3. the second jury member tells a task. 
  
  
  
  So, this permutation is nice.
solution: import sys
  testing = len(sys.argv) == 4 and sys.argv[3] == "myTest"
  interactive = False
  if testing:
      cmd = sys.stdout
      from time import time
      start_time = int(round(time() * 1000)) 
      readAll = open(sys.argv[1], 'r').read
      sys.stdout = open(sys.argv[2], 'w')
  else:
      readAll = sys.stdin.read
  
  # ############ ---- I/O Functions ---- ############
  
  class InputData:
      def __init__(self):
          self.lines = readAll().split('\n')
          self.n = len(self.lines)
          self.ii = -1
      def input(self):
          self.ii += 1
          assert self.ii < self.n
          return self.lines[self.ii]
  
  flush = sys.stdout.flush
  if interactive and not testing:
      input = sys.stdin.readline
  else:
      inputData = InputData()
      input = inputData.input
  
  def intin():
      return(int(input()))
  def intlin():
      return(list(map(int,input().split())))
  def chrin():
      return(list(input()))
  def strin():
      return input()
  def lout(l, sep="\n", toStr=True):
      print(sep.join(map(str, l) if toStr else l))
  def dout(*args, **kargs):
      if not testing: return
      if args: print(args[0] if len(args)==1 else args)
      if kargs: print([(k,v) for k,v in kargs.items()])
  def ask(q):
      sys.stdout.write(str(q)+'\n')
      flush()
      return intin()
      
  # ############ ---- I/O Functions ---- ############
  def gcd(a, b):
      while b:
          a, b = b, a%b
      return a
  
  def modInverse(b,m):
      g = math.gcd(b, m)
      if (g != 1):
          # print("Inverse doesn't exist")
          return -1
      else:
          # If b and m are relatively prime,
          # then modulo inverse is b^(m-2) mode m
          return pow(b, m - 2, m)
  # from math import ceil
  # from collections import defaultdict as ddict, Counter
  # from heapq import *
  # from Queue import Queue
  def gcd(a, b):
      while b:
          a, b = b, a%b
      return a
  
  def fastPow(a,b,mod):
      bb = format(b, 'b')[::-1]
      c = 1
      for m in xrange(len(bb)):
          if bb[m] == '1':
              c = (c*a)%mod
          a = (a*a)%mod
      return c
  
  def modDiv(b, m):
      g = gcd(b, m)
      if g != 1:
          return -1
      else:
          return fastPow(b, m-2, m)
  
  def nCr(n, r, facs, m):
      if n < 0 or r < 0 or n < r:
          return 0
      return facs[n] * modDiv(facs[r]*facs[n-r], m)
  
  MOD = 998244353
  def main():
      n = intin()
      a = intlin()
      a.sort()
      # dout(a)\
      x = 0
      y = 0
      maxi = a[-1]
      for i in xrange(n):
          if a[i] == maxi:
              x += 1
          if a[i] == maxi-1:
              y += 1
      facs = [1]*(n+1)
      for i in xrange(1,n+1):
          facs[i] = (facs[i-1]*i)%MOD
      if x > 1:
          return facs[n]
      
      b = sorted(list(set(a)))
      dout(b)
      if len(b) > 1 and b[-1]-b[-2] > 1:
          return 0
      tmp = 0
      for i in xrange(y+1,n+1):
          tmp += nCr(i-1,y,facs, MOD)*facs[n-1-y]
          # dout(tmp)
      return (facs[n] - facs[y]*tmp)%MOD
  
  anss = []
  for _ in xrange(intin()):
      anss.append(main())
      # anss.append("YES" if main() else "NO")
  lout(anss)
  
  if testing:
      sys.stdout = cmd
      print(int(round(time() * 1000))  - start_time)