#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T MAX(T a, T b) {
  if (a > b) return a;
  return b;
}
template <class T>
inline T MIN(T a, T b) {
  if (a < b) return a;
  return b;
}
int N;
char s[40 * 2 + 5];
long long dp[40 * 2 + 5][40 + 5];
long long tenth[40 + 5];
long long doDP(int i, int H) {
  if (i == 2 * N && H != N) return -2;
  if (i == 2 * N && H == N) return 0;
  long long &ret = dp[i][H];
  if (ret != -1) return ret;
  ret = -2;
  long long tmp;
  tmp = doDP(i + 1, H);
  if (tmp != -2) {
    tmp += tenth[N - ((i + 1) - H)] * ((int)(s[i]) - 48);
    ret = MAX(ret, tmp);
  }
  tmp = doDP(i + 1, H + 1);
  if (tmp != -2) {
    tmp += tenth[N - (H + 1)] * ((int)(s[i]) - 48);
    ret = MAX(ret, tmp);
  }
  return ret;
}
string ans;
void trace(int i, int H) {
  if (i == 2 * N) return;
  long long ret = doDP(i, H);
  long long tmp;
  tmp = doDP(i + 1, H);
  if (tmp != -2) {
    tmp += tenth[N - ((i + 1) - H)] * ((int)(s[i]) - 48);
    if (ret == tmp) {
      ans.push_back('M');
      trace(i + 1, H);
      return;
    }
  }
  tmp = doDP(i + 1, H + 1);
  if (tmp != -2) {
    tmp += tenth[N - (H + 1)] * ((int)(s[i]) - 48);
    if (ret == tmp) {
      ans.push_back('H');
      trace(i + 1, H + 1);
      return;
    }
  }
}
int main() {
  scanf("%d", &N);
  scanf("%s", s);
  tenth[0] = 1LL;
  for (int i = 1; i <= 18; i++) tenth[i] = tenth[i - 1] * 10LL;
  memset(dp, -1, sizeof(dp));
  trace(0, 0);
  cout << ans << endl;
  return 0;
}
