#include <iostream>
#include <fstream>
#include <algorithm>
#include <math.h>
#include <string>
#include <vector>
#include <stdio.h>
#include <queue>

#define LL long long
#define pb push_back
#define lm 10001
#define MOD 1000000007

using namespace std;

int t;
string l;

int main()
{
    freopen("data.in","r",stdin);
    while(getline(cin,l))
    {
        bool ok=true;
        replace(l.begin(),l.end(),'-','+');

        t=l.find("bP");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"BP");
        }
        t=l.find("bp");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"BP");
        }
        t=l.find("Bp");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"BP");
        }
        t=l.find("bX");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"BX");
        }
        t=l.find("bx");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"BX");
        }
        t=l.find("Bx");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"BX");
        }
        t=l.find("sI");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"SI");
        }
        t=l.find("si");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"SI");
        }
        t=l.find("Si");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"SI");
        }
        t=l.find("dI");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"DI");
        }
        t=l.find("di");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"DI");
        }
        t=l.find("Di");
        if(t!=string::npos)
        {
            l.replace(t,t+1,"DI");
        }

        t=l.find("BP");
        if(t!=string::npos )
            {
                l.replace(t,t+1,"55");
                if(l.find("BX")!=string::npos )
                {
                    cout<<"ERROR\n";
                    ok=false;
                }
            }
        t=l.find("BX");
        if(t!=string::npos )
            l.replace(t,t+1,"55");
        if(ok)
        {
            t=l.find("SI");
            if(t!=string::npos )
            {
                l.replace(t,t+1,"55");
                if(l.find("DI")!=string::npos)
                {
                    cout<<"ERROR\n";
                    ok=false;
                }
            }
            t=l.find("DI");
            if(t!=string::npos )
                l.replace(t,t+1,"55");
        }
        if (ok)
        {
            if(l.find("+]")!=string::npos)
            {
                cout<<"ERROR\n";
                    ok=false;
            }
        }
        if (ok)
        {
            if(l.find("[+")!=string::npos)
            {
                cout<<"ERROR\n";
                    ok=false;
            }
        }
        if (ok)
        for(int i=0; i<l.size(); i++)
        {
            if(l[i]=='+' || l[i]=='[' || l[i]==']')
                continue;
            if(l[i]>='0' && l[i]<='9')
                continue;
            if(l[i]>='a' && l[i]<='z')
                continue;
            cout<<"ERROR\n";
            ok=false;
            break;
        }
        if(ok)
            cout<<"OK\n";
    }
    return 0;
}