#include <bits/stdc++.h>
using namespace std;
enum Type { Add, Sub, Mul, Div, Atom, XXX };
vector<Type> tokens;
vector<char> operators;
bool IsOperator(char c) {
  return c == '+' || c == '-' || c == '*' || c == '/' || c == '(' || c == ')';
}
int Prio(char c) { return c == '(' ? 0 : c == '+' || c == '-' ? 1 : 2; }
void GotToken(Type type) { tokens.push_back(type); }
void Apply(char op) {
  Type rhs = tokens.back();
  tokens.pop_back();
  Type lhs = tokens.back();
  tokens.pop_back();
  if (lhs == XXX || rhs == XXX) {
    tokens.push_back(XXX);
  } else if (op == '+') {
    tokens.push_back(Add);
  } else if (op == '-') {
    if (rhs == Add || rhs == Sub)
      tokens.push_back(XXX);
    else
      tokens.push_back(Sub);
  } else if (op == '*') {
    if (lhs == Add || lhs == Sub || rhs == Add || rhs == Sub)
      tokens.push_back(XXX);
    else
      tokens.push_back(Mul);
  } else if (op == '/') {
    if (lhs == Add || lhs == Sub || rhs != Atom)
      tokens.push_back(XXX);
    else
      tokens.push_back(Div);
  }
}
void GotOperator(char op) {
  if (op == '(') {
    operators.push_back(op);
  } else if (op == ')') {
    while (operators.back() != '(') {
      Apply(operators.back());
      operators.pop_back();
    }
    operators.pop_back();
    if (tokens.back() != XXX) tokens.back() = Atom;
  } else {
    while (!operators.empty() && Prio(operators.back()) >= Prio(op)) {
      Apply(operators.back());
      operators.pop_back();
    }
    operators.push_back(op);
  }
}
map<string, Type> macro;
Type Proccess(const char* s) {
  bool inToken = false;
  string token;
  for (const char* i = s; *i; i++) {
    if (IsOperator(*i)) {
      if (inToken) {
        inToken = false;
        map<string, Type>::iterator it = macro.find(token);
        if (it == macro.end())
          GotToken(Atom);
        else
          GotToken(it->second);
      }
      GotOperator(*i);
    } else if (*i == ' ') {
      if (inToken) {
        inToken = false;
        map<string, Type>::iterator it = macro.find(token);
        if (it == macro.end())
          GotToken(Atom);
        else
          GotToken(it->second);
      }
    } else {
      if (!inToken) {
        token = "";
        inToken = true;
      }
      token.push_back(*i);
    }
  }
  if (inToken) {
    inToken = false;
    map<string, Type>::iterator it = macro.find(token);
    if (it == macro.end())
      GotToken(Atom);
    else
      GotToken(it->second);
  }
  while (!operators.empty()) {
    Apply(operators.back());
    operators.pop_back();
  }
  Type result = tokens[0];
  tokens.clear();
  return result;
}
void GetChar(char ch) {
  char c;
  do {
    c = getchar();
  } while (c != ch);
}
int main() {
  int n;
  scanf("%d", &n);
  char foo[10];
  gets(foo);
  for (int i = 1; i <= n; i++) {
    char name[110];
    char value[110];
    GetChar('#');
    GetChar('d');
    GetChar('e');
    GetChar('f');
    GetChar('i');
    GetChar('n');
    GetChar('e');
    scanf("%s %[^\n]", name, value);
    gets(foo);
    macro[name] = Proccess(value);
  }
  char value[110];
  gets(value);
  puts(Proccess(value) == XXX ? "Suspicious" : "OK");
  return 0;
}
