#include <bits/stdc++.h>
using namespace std;
const int maxn = 150005;
int n, q, p[maxn], deg[maxn], len[maxn], down[maxn], f[maxn][26], cnt[maxn][26],
    sum[maxn], bad, lc[maxn], rc[maxn];
char c[maxn];
int main() {
  cin >> n >> q;
  for (int i = 2; i <= n; i++) cin >> p[i] >> c[i], deg[p[i]]++;
  for (int i = n; i; i--) {
    if (!len[p[i]])
      len[p[i]] = len[i] + 1;
    else if (len[p[i]] != len[i] + 1) {
      while (q--) cout << "Fou" << '\n';
      return 0;
    }
  }
  for (int i = n; i; i--) {
    if (!deg[i] || deg[i] == 2) down[i] = i;
    down[p[i]] = down[i];
  }
  for (int i = 1; i <= n; i++) {
    if (!lc[p[i]])
      lc[p[i]] = down[i];
    else if (!rc[p[i]])
      rc[p[i]] = down[i];
  }
  for (int i = 2; i <= n; i++)
    if (deg[p[i]] == 1 && p[i] != 1) p[i] = p[p[i]];
  for (int i = 2; i <= n; i++)
    if (c[i] != '?') cnt[down[i]][c[i] - 'a']++;
  for (int i = n; i; i--) {
    if (deg[i] == 2 || i == 1) {
      for (int j = 0; j <= 25; j++)
        f[i][j] = max(f[lc[i]][j] + cnt[lc[i]][j], f[rc[i]][j] + cnt[rc[i]][j]),
        sum[i] += f[i][j];
      if (sum[i] > len[i]) bad++;
    }
  }
  while (q--) {
    int w;
    char op;
    cin >> w >> op;
    if (c[w] != '?') {
      cnt[down[w]][c[w] - 'a']--;
      int u = down[w];
      while (u != 1) {
        u = p[u];
        if (sum[u] > len[u]) bad--;
        sum[u] -= f[u][c[w] - 'a'];
        f[u][c[w] - 'a'] = max(f[lc[u]][c[w] - 'a'] + cnt[lc[u]][c[w] - 'a'],
                               f[rc[u]][c[w] - 'a'] + cnt[rc[u]][c[w] - 'a']);
        sum[u] += f[u][c[w] - 'a'];
        if (sum[u] > len[u]) bad++;
      }
      c[w] = '?';
    }
    if (op != '?') {
      c[w] = op;
      cnt[down[w]][op - 'a']++;
      int u = down[w];
      while (u != 1) {
        u = p[u];
        if (sum[u] > len[u]) bad--;
        sum[u] -= f[u][op - 'a'];
        f[u][op - 'a'] = max(f[lc[u]][op - 'a'] + cnt[lc[u]][op - 'a'],
                             f[rc[u]][op - 'a'] + cnt[rc[u]][op - 'a']);
        sum[u] += f[u][op - 'a'];
        if (sum[u] > len[u]) bad++;
      }
    }
    if (bad)
      cout << "Fou" << '\n';
    else {
      cout << "Shi" << ' ';
      int ans = 0;
      for (int i = 0; i <= 25; i++)
        ans += (i + 1) * (len[1] - sum[1] + f[1][i]);
      cout << ans << '\n';
    }
  }
  return 0;
}
