package stack;

import java.util.Scanner;

public class KlammerCheck {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws StackException {
		Scanner in = new Scanner(System.in);
		Stack stack = new Stack();
		char klammer;
		char falscheKlammer;
		while (in.hasNextLine()) {
			String line = in.nextLine();
			try {
				for (char element : line.toCharArray()) {
					switch (element) {
					case '<':
					case '>':
					case '+':
					case '-':
					case ',':
					case '.':
						break;
					case '(':
						stack.push('(');
						break;
					case '{':
						stack.push('{');
						break;
					case '[':
						stack.push('[');
						break;
					case ']':
						klammer = '[';
						falscheKlammer = stack.pop();
						stack.push(falscheKlammer);
						if(stack.pop() == klammer)
							stack.pop();
						else
							throw new StackException("Ungültige Klammern", "Ungültige Klammern. Bekommen ");
						break;
					case '}':
						klammer = '{';
						if(stack.pop() == klammer)
							stack.pop();
						else
							throw new StackException("Ungültige Klammern", "Ungültige Klammern");
					case ')':
						klammer = '(';
						if(stack.pop() == klammer)
							stack.pop();
						else
							throw new StackException("Ungültige Klammern", "Ungültige Klammern");
					default:
						throw new StackException("Ungültiges Symbol",
								"falsches Symbol");
					}
				}

				if (!stack.isEmpty()) {
					throw new StackException("Fehlende Klammern",
							"Fehlende Klammern");
				}

				else {
					System.out.println(line + " hat gültige Klammern");
				}
			} catch (StackException e) {
				// TODO Auto-generated catch block
				if(e.getGrund().equals("falsches Symbol"))
					System.out.println(line + " hat ein falsches Symbol");
				else if (e.getGrund().equals("fehlende Klammer"))
						System.out.println(line + "fehlende ] Klammer");
				else if (e.getGrund().equals("unterlauf"))
						System.out.println(line + "zu viele ] Klammer");
				else if (e.getGrund().equals("überlauf"))
						System.out.println(line + "zu viele Klammern");
				
				
				while (!stack.isEmpty()) {
					try {
						stack.pop();
					} catch (StackException e1) {
						e1.printStackTrace();
					}
				}
			}
		}
	}

}


