#include <bits/stdc++.h>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
const int N = 150010;
int ch[N][3], f[N][27], cnt[N][27], p[N], blg[N], v[N], dep[N];
int nvalid[N], signv = 0, tot_dep;
void upd(int x) {
  assert(x == blg[x]);
  if (nvalid[x]) nvalid[x] = 0, signv--;
  for (int i = (1); i <= (26); ++i) f[x][i] = 0;
  for (int j = (1); j <= (ch[x][0]); ++j) {
    int y = ch[x][j];
    assert(y == blg[y]);
    for (int i = (1); i <= (26); ++i)
      f[x][i] = std::max(f[x][i], +f[y][i] + (v[y] == i));
  }
  int sum = 0;
  for (int i = (1); i <= (26); ++i) sum += f[x][i];
  if (sum > tot_dep - dep[x]) nvalid[x] = 1, signv++;
  for (int i = (1); i <= (26); ++i) f[x][i] += cnt[x][i];
}
int main() {
  std::ios::sync_with_stdio(0);
  cout.tie(0);
  int n, q;
  cin >> n >> q;
  dep[1] = 1, blg[1] = 1;
  for (int i = (2); i <= (n); ++i) {
    blg[i] = i;
    char c;
    cin >> p[i] >> c;
    v[i] = (c == '?' ? 0 : (c - 'a' + 1));
    dep[i] = dep[p[i]] + 1;
    ch[p[i]][++ch[p[i]][0]] = i;
  }
  for (int i = (1); i <= (n); ++i) {
    if (ch[i][0] == 0) {
      if (tot_dep == 0) tot_dep = dep[i];
      if (tot_dep != dep[i]) {
        while (q--) cout << "Fou\n";
        return 0;
      }
    }
  }
  for (int i = (n); i >= (1); --i) {
    if (ch[p[i]][0] == 1) {
      for (int c = (1); c <= (26); ++c) cnt[p[i]][c] += cnt[i][c];
      cnt[p[i]][v[i]]++;
      blg[i] = p[i];
      dep[p[i]] = dep[i];
      ch[p[i]][0] = ch[i][0], ch[p[i]][1] = ch[i][1], ch[p[i]][2] = ch[i][2];
    }
  }
  for (int i = (1); i <= (n); ++i) blg[i] = blg[blg[i]];
  for (int i = (n); i >= (1); --i)
    if (i == blg[i]) upd(i);
  while (q--) {
    int x;
    char c;
    cin >> x >> c;
    if (x == blg[x]) {
      v[x] = (c == '?' ? 0 : (c - 'a' + 1));
    } else {
      cnt[blg[x]][v[x]]--;
      cnt[blg[x]][v[x] = (c == '?' ? 0 : (c - 'a' + 1))]++;
      x = blg[x];
    }
    for (; x != 1; x = blg[p[x]]) upd(x);
    upd(1);
    if (signv != 0)
      cout << "Fou\n";
    else {
      cout << "Shi ";
      int free = tot_dep - 1;
      long long ans = 0;
      for (int i = (1); i <= (26); ++i) {
        ans += i * f[1][i];
        free -= f[1][i];
      }
      ans += free * 351;
      cout << ans << '\n';
    }
  }
  return 0;
}
