#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
struct ob {
  int g;
  int h;
  int r;
  int s;
  ob(int x, int y, int z, int k) {
    g = x;
    h = y;
    r = z;
    s = k;
  }
};
bool operator<(ob x1, ob x2) {
  if (x1.g != x2.g)
    return (x1.g < x2.g);
  else if (x1.h != x2.h)
    return (x1.h < x2.h);
  else if (x1.r != x2.r)
    return (x1.r < x2.r);
  else
    return (x1.s < x2.s);
}
int fcknMin(ob x) {
  int mn = 1e9;
  mn = min(mn, x.g);
  mn = min(mn, x.h);
  mn = min(mn, x.r);
  mn = min(mn, x.s);
  return mn;
}
set<ob> fr;
vector<ob> v;
int n;
int main() {
  cin >> n;
  for (int i = 0; i < (int)(n); i++) {
    char x;
    cin >> x;
    if (x == 'G') {
      if (v.size() > 0)
        for (int j = 0; j < (int)(v.size()); j++) v[j].g++;
      else
        v.push_back(ob(1, 0, 0, 0));
    } else if (x == 'H') {
      if (v.size() > 0)
        for (int j = 0; j < (int)(v.size()); j++) v[j].h++;
      else
        v.push_back(ob(0, 1, 0, 0));
    } else if (x == 'S') {
      if (v.size() > 0)
        for (int j = 0; j < (int)(v.size()); j++) v[j].s++;
      else
        v.push_back(ob(0, 0, 0, 1));
    } else if (x == 'R') {
      if (v.size() > 0)
        for (int j = 0; j < (int)(v.size()); j++) v[j].r++;
      else
        v.push_back(ob(0, 0, 1, 0));
    } else if (x == '?') {
      int m = v.size();
      if (v.size() > 0)
        for (int j = 0; j < (int)(m); j++) {
          ob z = v[j];
          int mn = fcknMin(z);
          if (z.g == mn) {
            z.g++;
            fr.insert(z);
            z.g--;
          }
          if (z.h == mn) {
            z.h++;
            fr.insert(z);
            z.h--;
          }
          if (z.r == mn) {
            z.r++;
            fr.insert(z);
            z.r--;
          }
          if (z.s == mn) {
            z.s++;
            fr.insert(z);
            z.s--;
          }
        }
      else {
        v.push_back(ob(1, 0, 0, 0));
        v.push_back(ob(0, 1, 0, 0));
        v.push_back(ob(0, 0, 1, 0));
        v.push_back(ob(0, 0, 0, 1));
      }
    }
    if (fr.size() > 0) {
      v.clear();
      for (set<ob>::iterator it = fr.begin(); it != fr.end(); ++it)
        v.push_back(*it);
      fr.clear();
    }
  }
  set<string> ans;
  for (int i = 0; i < (int)(v.size()); i++) {
    int mn = fcknMin(v[i]);
    if (v[i].g == mn) ans.insert("Gryffindor");
    if (v[i].h == mn) ans.insert("Hufflepuff");
    if (v[i].r == mn) ans.insert("Ravenclaw");
    if (v[i].s == mn) ans.insert("Slytherin");
  }
  int m = ans.size();
  for (int i = 0; i < (int)(m); i++) {
    cout << *ans.begin() << endl;
    ans.erase(ans.begin());
  }
  return 0;
}
