#include #include using namespace std; char sir[100005]; int valid(char &c){ if(c == '+' || c == '-' || c == '[' || c == ']' || (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z')) return 1; if(c == 'B' || c == 'D' || c == 'P' || c == 'S' || c == 'X' || c == 'I'){ c -= 'A'; c += 'a'; return 1; } return 0; } int p, lim; int kkt1 = 0, kkt2 = 0, kkt = 0; int lit(int x){ return (sir[x] >= 'a' && sir[x] <= 'z'); } int lel(int pos){ if(sir[pos] == 'B') return (sir[pos + 1] == 'x' || sir[pos + 1] == 'X' || sir[pos + 1] == 'P' || sir[pos + 1] == 'p'); if(sir[pos] == 'D' || sir[pos] == 'S') return sir[pos + 1] == 'I' || sir[pos + 1] == 'i'; if(sir[pos] == 'I') return sir[pos - 1] == 'D' || sir[pos - 1] == 'd' || sir[pos - 1] == 's' || sir[pos - 1] == 'S'; if(sir[pos] == 'X' || sir[pos] == 'P') return sir[pos - 1] == 'B' || sir[pos - 1] == 'b'; return 1; } int cauta_inadvertente(){ for(int i = p; i < lim; ++i) if(!lel(i)) return 0; for(int i = p; i < lim; ++i) if(!valid(sir[i])) return 0; kkt1 = kkt2 = kkt = 0; for(int i = 0; i < lim; ++i) if(lit(i) && !lit(i + 1)) ++kkt; else if(lit(i)){ if(sir[i] == 'b'){ ++kkt1; sir[i + 1] = '0'; } else if(sir[i] == 'd' || sir[i] == 's'){ ++kkt2; sir[i + 1] = '0'; } else return 0; } if(kkt1 > 1 || kkt2 > 1 || kkt > 1) return 0; if(sir[0] == ']' || sir[lim - 1] == '[' || sir[0] == '+' || sir[0] == '-' || sir[lim - 1] == '+' || sir[lim - 1] == '-') return 0; int numd = 0; for(int i = 0; i < lim; ++i) if(sir[i] == '['){ ++numd; if(sir[i + 1] == '+' || sir[i + 1] == '-' || sir[i + 1] == ']') return 0; } else if(sir[i] == ']'){ --numd; if(numd < 0) return 0; if(sir[i - 1] == '+' || sir[i - 1] == '-') return 0; } return 1; } int main(){ #ifndef ONLINE_JUDGE freopen("kek.in", "r", stdin); #endif while(gets(sir)){ p = 0; lim = strlen(sir); if(cauta_inadvertente()) printf("OK\n"); else printf("ERROR\n"); } return 0; }