#include <bits/stdc++.h>
using namespace std;
const int N = 150010;
int gi() {
  int x = 0, o = 1;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') o = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * o;
}
int n, q, fa[N], len[N], id[N], cnt[N][26], ban = 0, sum[N], f[N][26];
vector<int> E[N], G[N];
char c[N];
int dfs(int u) {
  int son = 0;
  for (auto v : E[u]) {
    ++son;
    dfs(v);
    if (len[u] && len[u] != len[v] + 1) {
      while (q--) puts("Fou");
      exit(0);
    }
    len[u] = len[v] + 1;
    id[u] = id[v];
  }
  if (son != 1 || !u) {
    id[u] = u;
    for (auto v : E[u]) fa[id[v]] = u, G[u].push_back(id[v]);
  }
  return id[u];
}
void upd(int u, int c, int w) {
  cnt[u][c] += w;
  for (int x = fa[u]; ~x; x = fa[x]) {
    ban -= sum[x] > len[x];
    sum[x] -= f[x][c];
    f[x][c] = 0;
    for (auto v : G[x]) f[x][c] = max(f[x][c], f[v][c] + cnt[v][c]);
    sum[x] += f[x][c];
    ban += sum[x] > len[x];
  }
}
int main() {
  cin >> n >> q;
  for (int i = 2; i <= n; i++) E[gi()].push_back(i), c[i] = getchar();
  E[0].push_back(1);
  dfs(0);
  --len[0];
  fa[0] = -1;
  for (int i = 2; i <= n; i++)
    if (c[i] != '?') upd(id[i], c[i] - 'a', 1);
  while (q--) {
    int u = gi();
    if (c[u] != '?') upd(id[u], c[u] - 'a', -1);
    c[u] = getchar();
    if (c[u] != '?') upd(id[u], c[u] - 'a', 1);
    if (ban)
      puts("Fou");
    else {
      cout << "Shi ";
      int ans = 0;
      for (int i = 0; i < 26; i++) ans += (i + 1) * (f[0][i] + len[0] - sum[0]);
      cout << ans << '\n';
    }
  }
  return 0;
}
