#include <bits/stdc++.h>
using namespace std;
inline void open(const char *s) {}
inline int rd() {
  static int x, f;
  x = 0;
  f = 1;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  return f > 0 ? x : -x;
}
const int N = 150010;
int n, m, dep[N], mxd = 0, c[N], d[N], tmp = 0;
int fa[N];
int id[N], cnt = 0, a[N][26], mx[N][26], son[N][2];
vector<int> e[N];
void dfs(int u, int D) {
  if (D == 1)
    id[u] = ++cnt;
  else if (c[u] >= 0)
    a[id[u]][c[u]]++;
  if (!e[u].size()) {
    dep[id[u]] = D;
    if (mxd && mxd != D) {
      while (m--) puts("Fou");
      exit(0);
    }
    mxd = D;
    return;
  }
  if (e[u].size() == 1) {
    int v = e[u][0];
    id[v] = id[u];
    dfs(v, D + 1);
    return;
  }
  int v1 = e[u][0], v2 = e[u][1];
  dep[id[u]] = D;
  fa[id[v1] = ++cnt] = id[u];
  fa[id[v2] = ++cnt] = id[u];
  son[id[u]][0] = id[v1];
  son[id[u]][1] = id[v2];
  dfs(v1, D + 1);
  dfs(v2, D + 1);
}
inline void build() {
  for (int u = cnt; u >= 1; u--) {
    d[u] = mxd - dep[u];
    int v1 = son[u][0], v2 = son[u][1];
    if (!v1) continue;
    for (int i = 0; i <= 25; i++) {
      mx[u][i] = max(mx[v1][i] + a[v1][i], mx[v2][i] + a[v2][i]);
      d[u] -= mx[u][i];
    }
    if (d[u] < 0) ++tmp;
  }
}
inline void gao(int x, int i) {
  for (int u = fa[x]; u; u = fa[u]) {
    int v1 = son[u][0], v2 = son[u][1];
    if (d[u] < 0) --tmp;
    d[u] += mx[u][i];
    mx[u][i] = max(mx[v1][i] + a[v1][i], mx[v2][i] + a[v2][i]);
    d[u] -= mx[u][i];
    if (d[u] < 0) ++tmp;
  }
}
int main() {
  open("hh");
  n = rd();
  m = rd();
  for (int i = 2; i <= n; i++) e[rd()].push_back(i), c[i] = getchar() - 'a';
  dfs(1, 1);
  build();
  while (m--) {
    int x = rd();
    if (c[x] >= 0) {
      --a[id[x]][c[x]];
      gao(id[x], c[x]);
    }
    c[x] = getchar() - 'a';
    if (c[x] >= 0) {
      ++a[id[x]][c[x]];
      gao(id[x], c[x]);
    }
    if (tmp) {
      puts("Fou");
      continue;
    }
    long long ans = 0;
    int hh = mxd - 1;
    for (int i = 0; i <= 25; i++) hh -= mx[1][i] + a[1][i];
    for (int i = 0; i <= 25; i++)
      ans += 1ll * (i + 1) * (hh + mx[1][i] + a[1][i]);
    printf("Shi %lld\n", ans);
  }
  return 0;
}
