#include <bits/stdc++.h>
using namespace std;
const int ILLEGAL = -1;
const int MULTI_TERM = -2;
const int MULTI_FACTOR = -3;
const int SINGLE_FACTOR = -4;
inline string get_expr() {
  string ret;
  for (char c = cin.get(); c != '\n'; c = cin.get())
    if (c != ' ') ret.push_back(c);
  return ret;
}
struct macro {
  string name, expr;
  int type;
  macro() : type(0) {}
  void get() {
    string buf;
    cin >> buf;
    if (buf.size() == 1) cin >> buf;
    cin >> name;
    expr = get_expr();
  }
};
struct macrolist {
  vector<macro> list;
  string s;
  size_t p;
  void insert(const macro &m) { list.push_back(m); }
  int find(const string &name) {
    for (size_t i = 0; i < list.size(); ++i)
      if (list[i].name == name) return i;
    return SINGLE_FACTOR;
  }
  int factor() {
    if (s[p] == '(') {
      int type;
      ++p;
      if ((type = expr()) == ILLEGAL) return ILLEGAL;
      if (type >= 0 && list[type].type == ILLEGAL) return ILLEGAL;
      ++p;
      return SINGLE_FACTOR;
    }
    if (isdigit(s[p])) {
      while (p < s.size() && isdigit(s[p])) ++p;
      return SINGLE_FACTOR;
    }
    string name;
    while (p < s.size() && isalpha(s[p])) {
      name.push_back(s[p]);
      ++p;
    }
    return find(name);
  }
  int term() {
    int type = factor();
    if (type == ILLEGAL) return ILLEGAL;
    if (p == s.size() || s[p] == '+' || s[p] == '-' || s[p] == ')') return type;
    if (type >= 0 && list[type].type >= MULTI_TERM) return ILLEGAL;
    while (p < s.size() && s[p] != '+' && s[p] != '-' && s[p] != ')') {
      if (s[p] == '*') {
        ++p;
        type = factor();
        if (type == ILLEGAL) return ILLEGAL;
        if (type >= 0 && list[type].type >= MULTI_TERM) return ILLEGAL;
      } else {
        ++p;
        type = factor();
        if (type == ILLEGAL) return ILLEGAL;
        if (type >= 0 && list[type].type >= MULTI_FACTOR) return ILLEGAL;
      }
    }
    return MULTI_FACTOR;
  }
  int expr() {
    int type;
    if (s[p] == '-') {
      ++p;
      type = term();
      if (type == ILLEGAL) return ILLEGAL;
      if (type >= 0 && list[type].type >= MULTI_TERM) return ILLEGAL;
    } else {
      type = term();
      if (type == ILLEGAL) return ILLEGAL;
    }
    if (p == s.size() || s[p] == ')') return type;
    while (p < s.size() && s[p] != ')') {
      if (s[p] == '+') {
        ++p;
        type = term();
        if (type == ILLEGAL) return ILLEGAL;
        if (type >= 0 && list[type].type == ILLEGAL) return ILLEGAL;
      } else {
        ++p;
        type = term();
        if (type == ILLEGAL) return ILLEGAL;
        if (type >= 0 && list[type].type >= MULTI_TERM) return ILLEGAL;
      }
    }
    return MULTI_TERM;
  }
  int gettype(const string &s1) {
    s = s1;
    p = 0;
    return expr();
  }
};
int n;
macrolist L;
int main() {
  string expr;
  macro m;
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    m.get();
    m.type = L.gettype(m.expr);
    L.insert(m);
  }
  int ans = L.gettype(get_expr());
  if (ans == ILLEGAL || (ans >= 0 && L.list[ans].type == ILLEGAL))
    cout << "Suspicious" << endl;
  else
    cout << "OK" << endl;
  return 0;
}
