func_code_string: #include <bits/stdc++.h>   using namespace std;   int val_of_op[200];   int n;   struct T {     string Name, Expr;     bool danger;     int num[5];     int sum(int a0 = 0, int a1 = 0, int a2 = 0, int a3 = 0) {       return num[a0] + num[a1] + num[a2] + num[a3];     }   } macro[1000];   void Eliminate_Space(string &s) {     int p;     while ((p = s.find(   )) != string::npos) s.erase(s.begin() + p);   }   bool isDigit(char c) { return c >=  0  && c <=  9 ; }   bool isLetter(char c) { return c >=  a  && c <=  z  || c >=  A  && c <=  Z ; }   stack<int> Ope, Num;   void Pop(int n) {     int y = Num.top();     Num.pop();     int x = Num.top();     Num.pop();     int z = Ope.top();     Ope.pop();     if (x != -1 && macro[x].danger || y != -1 && macro[y].danger)       macro[n].danger = 1;     if (z == 2 && y != -1 && macro[y].sum(1, 2)) macro[n].danger = 1;     if (z == 3)       if (y != -1 && macro[y].sum(1, 2) || x != -1 && macro[x].sum(1, 2))         macro[n].danger = 1;     if (z == 4)       if (x != -1 && macro[x].sum(1, 2) || y != -1 && macro[y].sum(1, 2, 3, 4))         macro[n].danger = 1;     Num.push(x);   }   void doit(int n, string &s) {     while (!Ope.empty()) Ope.pop();     while (!Num.empty()) Num.pop();     int p = 0;     while (p < ((int)(s).size())) {       if (s[p] ==  ( ) {         Ope.push(-1);         p++;         continue;       }       if (s[p] ==  ) ) {         while (Ope.top() != -1) Pop(n + 1);         Ope.pop();         if (Num.top() != -1 && macro[Num.top()].danger) macro[n + 1].danger = 1;         Num.top() = -1;         p++;         continue;       }       if (val_of_op[s[p]]) {         while (!Ope.empty() && val_of_op[s[p]] <= 2 && Ope.top() >= 3) Pop(n + 1);         Ope.push(val_of_op[s[p]]);         p++;         continue;       }       string a;       while (p < ((int)(s).size()) && (isDigit(s[p]) || isLetter(s[p])))         a.push_back(s[p++]);       int i = -1;       for (int j = (1); j <= (n); j++)         if (macro[j].Name == a) i = j;       Num.push(i);     }     while (!Ope.empty()) macro[n + 1].num[Ope.top()]++, Pop(n + 1);     if (Num.top() != -1 && macro[Num.top()].danger) macro[n + 1].danger = 1;   }   int main() {     val_of_op[ + ] = 1, val_of_op[ - ] = 2, val_of_op[ * ] = 3,     val_of_op[ / ] = 4;     cin >> n;     getline(cin, macro[1].Name);     for (int i = (1); i <= (n); i++) {       getline(cin, macro[i].Name,  e );       getline(cin, macro[i].Name,  e );       cin >> macro[i].Name;       getline(cin, macro[i].Expr);       Eliminate_Space(macro[i].Expr);       doit(i - 1, macro[i].Expr);     }     string Expr;     getline(cin, Expr);     Eliminate_Space(Expr);     doit(n, Expr);     if (macro[n + 1].danger)       puts( Suspicious );     else       puts( OK );     return 0;   }   