#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
const int ddx[8] = {0, 0, 1, 1, 1, -1, -1, -1},
          ddy[8] = {1, -1, 1, 0, -1, 1, 0, -1};
long long POW(long long a, long long b, long long MMM) {
  long long ret = 1;
  for (; b; b >>= 1, a = (a * a) % MMM)
    if (b & 1) ret = (ret * a) % MMM;
  return ret;
}
long long GCD(long long a, long long b) { return b ? GCD(b, a % b) : a; }
long long LCM(long long a, long long b) {
  if (a == 0 || b == 0) return a + b;
  return a / GCD(a, b) * b;
}
long long INV(long long a, long long m) {
  long long m0 = m, y = 0, x = 1;
  if (m == 1) return 0;
  while (a > 1) {
    long long q = a / m;
    long long t = m;
    m = a % m, a = t;
    t = y;
    y = x - q * y;
    x = t;
  }
  if (x < 0) x += m0;
  return x;
}
pair<long long, long long> EXGCD(long long a, long long b) {
  if (b == 0) return {1, 0};
  auto t = EXGCD(b, a % b);
  return {t.second, t.first - t.second * (a / b)};
}
bool OOB(long long x, long long y, long long N, long long M) {
  return 0 > x || x >= N || 0 > y || y >= M;
}
template <typename T, typename V>
ostream &operator<<(ostream &os, const pair<T, V> &pai) {
  return os << '(' << pai.first << ' ' << pai.second << ')';
}
template <size_t n, typename... T>
typename std::enable_if<(n >= sizeof...(T))>::type print_tuple(
    std::ostream &, const std::tuple<T...> &) {}
template <size_t n, typename... T>
typename std::enable_if<(n < sizeof...(T))>::type print_tuple(
    std::ostream &os, const std::tuple<T...> &tup) {
  if (n != 0) os << ", ";
  os << std::get<n>(tup);
  print_tuple<n + 1>(os, tup);
}
template <typename... T>
std::ostream &operator<<(std::ostream &os, const std::tuple<T...> &tup) {
  os << "[";
  print_tuple<0>(os, tup);
  return os << "]";
}
template <typename T>
ostream &operator<<(ostream &os, const list<T> &v) {
  os << '[';
  for (auto p : v) os << p << ",";
  os << "]";
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  os << '[';
  for (auto p : v) os << p << ",";
  os << "]";
  return os;
}
template <typename T>
ostream &operator<<(ostream &os, const deque<T> &v) {
  os << '[';
  for (auto p : v) os << p << ",";
  os << "]";
  return os;
}
template <typename... T>
ostream &operator<<(ostream &os, const set<T...> &v) {
  os << "{";
  for (auto p : v) os << p << ",";
  os << "}";
  return os;
}
template <typename... T>
ostream &operator<<(ostream &os, const multiset<T...> &v) {
  os << "{";
  for (auto p : v) os << p << ",";
  os << "}";
  return os;
}
template <typename... T>
ostream &operator<<(ostream &os, const map<T...> &v) {
  os << "{";
  for (auto p : v) os << p << ",";
  os << "}";
  return os;
}
void default_setting() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout << fixed;
  cout.precision(20);
  srand(std::chrono::high_resolution_clock::now().time_since_epoch().count());
}
int mysol(vector<int> a) {
  int before = -1;
  int cnt = 0;
  while (true) {
    int idx = -1;
    for (int i = 0; i < ((int)(a.size())); i++) {
      if (a[i] > 0 && i != before && (idx == -1 || a[idx] < a[i])) idx = i;
    }
    if (idx == -1) break;
    cnt++;
    before = idx;
    a[idx]--;
  }
  return cnt % 2;
}
int main(void) {
  default_setting();
  default_setting();
  int t;
  cin >> t;
  while (t--) {
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) cin >> a[i];
    if (mysol(a))
      cout << ("T") << '\n';
    else
      cout << ("HL") << '\n';
  }
}
