import java.io.PrintStream; import java.nio.BufferOverflowException; import java.util.HashMap; import java.util.Map; import java.util.NoSuchElementException; import java.util.Scanner; import type.lib.CharStack; public class Check11D { public static void main(String[] args) { Scanner input = new Scanner(System.in); PrintStream output = System.out; output.println("Enter expression"); String expression = input.nextLine(); Map opposite = new HashMap(); opposite.put(')', '('); opposite.put(']', '['); opposite.put('}', '{'); try { CharStack stack = new CharStack(); for (int i = 0; i < expression.length(); i++) { char letter = expression.charAt(i); if (opposite.containsValue(letter)) { stack.add(letter); } else if (opposite.containsKey(letter)) { char top = stack.removeLast(); if (top != opposite.get(letter)) { throw new Exception("Overlapping"); } } } if (!stack.isEmpty()) { throw new Exception("Imbalanced"); } output.println("OK"); } catch (BufferOverflowException e) { output.println("Too deeply nested"); } catch (NoSuchElementException e) { output.println("Imbalanced"); } catch (Exception e) { output.println(e.getMessage()); } } }