#include <bits/stdc++.h>
using namespace std;
const int maxnn = 1e6 + 7;
const long long mod = 1e9 + 7;
const int inf = 1e9 + 7;
const double eps = 1e-6;
const double pi = 3.14159265358979;
long long fun(long long x1, long long y1, long long x2, long long y2) {
  return abs(x1 - x2) + abs(y1 - y2);
}
int check(long long a, long long b, long long c, long long d, long long i,
          long long n) {
  if ((c * (n - i - 1) - i * d) <= (b - a) &&
      (b - a) <= (d * (n - i - 1) - i * c))
    return 1;
  else
    return 0;
}
long long ksm(long long a, long long b) {
  long long ans = 1ll;
  while (b) {
    if (b & 1) ans = (a * ans) % mod;
    a = (a * a) % mod;
    b >>= 1;
  }
  return ans % mod;
}
long long C(long long n, long long m) {
  if (m == 0ll) return 1ll;
  if (n < m) return 0ll;
  if (m < 0ll) return 0ll;
  if (n == m) return 1ll;
  long long ans = 1ll;
  for (long long i = 0; i < m; i++) {
    ans = ans * (n - i) % mod;
    ans = ans * ksm(i + 1ll, mod - 2ll) % mod;
  }
  return ans % mod;
}
string Manacher(string s) {
  long long ans = 0ll;
  long long n = (long long)s.size();
  ans = (n - 1ll) * n / 2ll;
  long long temp = 0ll;
  string t = "$#";
  for (int i = 0; i < s.size(); i++) {
    t += s[i];
    t += "#";
  }
  vector<int> p(t.size(), 0);
  int mx = 0, id = 0, reCenter = 0, reLen = 0;
  for (int i = 1; i < t.size(); i++) {
    p[i] = mx > i ? min(mx - i, p[2 * id - i]) : 1;
    while (t[i + p[i]] == t[i - p[i]]) p[i]++;
    if (i + p[i] > mx) {
      mx = i + p[i];
      id = i;
    }
    if (p[i] > reLen) {
      reLen = p[i];
      reCenter = i;
    }
    if (p[i] > 2ll) {
      temp += p[i] - 2ll;
      printf("%c %d\n", t[i], p[i]);
    }
  }
  ans -= temp;
  cout << ans + 1ll << endl;
  return s.substr((reCenter - reLen) / 2, reLen - 1);
}
struct jz {
  long long a[62][62];
  jz() { memset(a, 0ll, sizeof(a)); }
};
jz jzcf(jz x, jz y, int n) {
  jz ans;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      for (int k = 0; k < n; k++)
        ans.a[i][j] = (ans.a[i][j] + (x.a[i][k] * y.a[k][j] % mod)) % mod;
  return ans;
}
jz jzjf(jz x, jz y, int n) {
  jz ans;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      ans.a[i][j] = (x.a[i][j] - y.a[i][j] + mod) % mod;
    }
  }
  return ans;
}
jz cf(jz x, jz y, int n) {
  jz matrix1;
  jz ans;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      matrix1.a[i][j] = y.a[i][j];
    }
  }
  for (int k = 0; k < n; k++) {
    for (int t = n; t < n * 2; t++) {
      if ((t - k) == n) {
        matrix1.a[k][t] = 1;
      } else {
        matrix1.a[k][t] = 0;
      }
    }
  }
  for (int k = 0; k < n; k++) {
    if (matrix1.a[k][k] != 1) {
      int bs = matrix1.a[k][k];
      matrix1.a[k][k] = 1;
      for (int p = k; p < n * 2; p++) {
        matrix1.a[k][p] *= ksm(bs, mod - 2);
        matrix1.a[k][p] %= mod;
      }
    }
    for (int q = 0; q < n; q++) {
      if (q != k) {
        int bs = matrix1.a[q][k];
        for (int p = 0; p < n * 2; p++) {
          matrix1.a[q][p] =
              (matrix1.a[q][p] - (bs * matrix1.a[k][p] % mod) + mod) % mod;
        }
      } else {
        continue;
      }
    }
  }
  for (int x = 0; x < n; x++) {
    for (int y = n; y < n * 2; y++) {
      ans.a[x][y - n] = matrix1.a[x][y];
    }
  }
  return jzcf(x, ans, n);
}
jz jzksm(jz temp, long long b, int n) {
  jz ans;
  for (int i = 0; i < n; i++) {
    ans.a[i][i] = 1ll;
  }
  while (b) {
    if (b & 1) ans = jzcf(ans, temp, n);
    temp = jzcf(temp, temp, n);
    b >>= 1;
  }
  return ans;
}
int a[maxnn];
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
      scanf("%d", &a[i]);
    }
    sort(a, a + n);
    for (int i = n - 1; i >= 0; i--) {
      printf("%d ", a[i]);
    }
    printf("\n");
  }
  return 0;
}
