program sec; var row,srow:string; i,bl,br,variables:byte; c:char; error,bx,bp,si,di:boolean; letters:array['a'..'z'] of byte; begin while not eof do begin readln(row); error := false; for i:=1 to length(row) do if not((pos(row[i],'+-[]BDIPSX')>0) or (row[i] in ['a'..'z']) or (row[i] in ['0'..'9'])) then error := true; for c:='a' to 'z' do letters[c]:=0; for i:=1 to length(row) do if row[i] in ['a'..'z'] then inc(letters[row[i]]); variables:=0; for c:='a' to 'z' do if letters[c]>0 then inc(variables); if variables>1 then error:=true; if (pos('bx',row)>0) or (pos('bX',row)>0) or (pos('Bx',row)>0) or (pos('BX',row)>0) then bx:=true else bx:=false; if (pos('bp',row)>0) or (pos('bP',row)>0) or (pos('Bp',row)>0) or (pos('BP',row)>0) then bp:=true else bp:=false; if (pos('si',row)>0) or (pos('sI',row)>0) or (pos('Si',row)>0) or (pos('SI',row)>0) then si:=true else si:=false; if (pos('di',row)>0) or (pos('dI',row)>0) or (pos('Di',row)>0) or (pos('dI',row)>0) then di:=true else di:=false; if (bx and bp) or (si and di) then error := true; if (row[1] = '-') or (row[length(row)] = '-') or (row[1] = '+') or (row[length(row)] = '+') then error := true; bl := 0; br := 0; for i:=1 to length(row) do begin if row[i] = '[' then inc(bl); if row[i] = ']' then inc(br); end; if not error then if br<>bl then error := true; if not error then for i:=2 to length(row)-1 do begin if row[i] = '-' then if (row[i+1] = ']') or (row[i-1] = '[') then error := true; if row[i] = '+' then if (row[i+1] = ']') or (row[i-1] = '[') then error := true; end; if error then writeln('ERROR') else writeln('OK'); end; end.