#include <iostream> #include <fstream> #include <algorithm> #include <bitset> #include <cstdio> #include <vector> #include <cmath> #include <queue> #include <string> #include <stack> #include <map> #include <set> #define DN 55 #define pb push_back #define per pair<int,int> #define INF (1<<30) #define LL long long #define un unsigned #define x first #define y second #define f cin using namespace std; string x; stack< int > stiva; bool op(char c){ if(c=='-') return true; if(c=='+') return true; if(c=='[') return true; } int main() { for(;getline(cin,x);){ while(stiva.size()) stiva.pop(); int l_mici = 0 , L_MARI_A = 0, L_MARI_B = 0; bool valid = true; for(int i=0;i<x.size() && valid;++i){ if( isdigit(x[i]) ){ if(i-1 >=0 && !op(x[i-1])) valid=false; continue; } if(x[i]=='['){ stiva.push(1); if(i+1<x.size() && ( x[i+1]=='+' || x[i+1]=='-')) valid = false; continue; } if(x[i]==']'){ if(stiva.size()) stiva.pop(); else valid = false; continue; } if( (x[i]=='+' || x[i]=='-') && i+1<x.size() && x[i+1]==']') valid = false; if('a'<=x[i] && x[i]<='z')// e litera { if(i-1 >=0 && !op(x[i-1])) valid=false; if(l_mici) valid = false; ++l_mici; continue; } if('A'<=x[i] && x[i]<='Z'){ if(i-1 >=0 && !op(x[i-1])) valid=false; if (x[i] == 'B' && i+1<x.size() && (x[i+1] =='P' || x[i+1]=='X') && L_MARI_A == 0){ ++L_MARI_A; ++i; continue; } if(x[i]=='S' && i+1<x.size() && x[i+1] =='I' && L_MARI_B == 0 ){ ++L_MARI_B; ++i; continue; } else if(x[i]=='D' && i+1<x.size() && x[i+1] =='I' && L_MARI_B == 0 ){ ++L_MARI_B; ++i; continue; } else valid = false; continue; } if(x[i]=='-' || x[i]=='+') continue; valid = false; } if(stiva.size()) valid=false; if(valid) cout<<"OK\n"; else cout<<"ERROR\n"; } return 0; }