#include <bits/stdc++.h>
using namespace std;
int n;
map<string, int> mp;
string name[105], expr[105], tmp;
struct type {
  bool good;
  bool usedefine;
  char op;
  type() {
    good = 1;
    usedefine = 0;
    op = 0;
  }
};
type tp[105];
int level(char c) {
  if (c == '+' || c == '-') {
    return 1;
  }
  if (c == '*' || c == '/') {
    return 2;
  }
  if ('0' <= c && c <= '9') {
    return -1;
  }
  if ('a' <= c && c <= 'z') {
    return -2;
  }
  if ('A' <= c && c <= 'Z') {
    return -3;
  }
  return 0;
}
int st[105];
type parse(int l, int r, int ind) {
  int cnt = 0;
  int mx = -1;
  for (int i = l; i <= r; i++) {
    if (expr[ind][i] == '(') {
      st[cnt++] = i;
    }
    if (expr[ind][i] == ')') {
      int x = st[--cnt];
      if (cnt == 0 && i == r && x == l) {
        type t, s = parse(l + 1, r - 1, ind);
        t.op = 0;
        t.usedefine = s.usedefine;
        t.good = s.good;
        return t;
      }
    }
    if (cnt == 0) {
      if (level(expr[ind][i]) > 0) {
        if (mx == -1 || level(expr[ind][mx]) >= level(expr[ind][i])) {
          mx = i;
        }
      }
    }
  }
  if (!~mx) {
    tmp = expr[ind].substr(l, r - l + 1);
    if (mp.count(tmp)) {
      type t = tp[mp[tmp]];
      t.usedefine = 1;
      return t;
    }
    type t;
    return t;
  }
  type t = parse(mx + 1, r, ind), t1, t2 = parse(l, mx - 1, ind);
  char c = t.op, c1 = expr[ind][mx], c2 = t2.op;
  if ((c == '+' || c == '-') && c1 == '-' && t.usedefine) t1.good = 0;
  if ((c == '*' || c == '/') && c1 == '/' && t.usedefine) t1.good = 0;
  if ((c2 == '+' || c2 == '-') && (c1 == '/' || c1 == '*') && t2.usedefine)
    t1.good = 0;
  if ((c == '+' || c == '-') && (c1 == '/' || c1 == '*') && t.usedefine)
    t1.good = 0;
  t1.op = c1;
  t1.usedefine = t.usedefine || t2.usedefine;
  t1.good &= t2.good;
  t1.good &= t.good;
  return t1;
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> tmp;
    if (tmp == "#") cin >> tmp;
    cin >> name[i];
    mp[name[i]] = i;
    getline(cin, expr[i]);
    tmp = "";
    for (int j = 0; j < (int)expr[i].size(); j++) {
      if (expr[i][j] == ' ') continue;
      tmp += expr[i][j];
    }
    expr[i] = tmp;
  }
  getline(cin, expr[n + 1]);
  tmp = "";
  for (int j = 0; j < (int)expr[n + 1].size(); j++) {
    if (expr[n + 1][j] == ' ') continue;
    tmp += expr[n + 1][j];
  }
  expr[n + 1] = tmp;
  for (int i = 1; i <= n + 1; i++) {
    tp[i] = parse(0, (int)expr[i].size() - 1, i);
  }
  if (tp[n + 1].good) {
    puts("OK");
  } else {
    puts("Suspicious");
  }
  return 0;
}
