private static boolean isBalancedRecursive(char[] chars, int index, int count) {
		if (count < 0) {
			return false;
		}

		if (chars.length == index) {
			// if EOL return true if count is 0, else false
			return count == 0;
		}

		char current = chars[index];

		// GLOBAL: if anyone returns true just return true
		switch (current) {
			case '(':
				// if ( increase count and check rest.
				return isBalancedRecursive(chars, index+1, count+1);
			case ')':
				// if ) decrease count and check rest.
				return isBalancedRecursive(chars, index+1, count-1);
			case '[':
				// if [ split and increase on one but not the other and check rest.
				return isBalancedRecursive(chars, index+1, count)
						|| isBalancedRecursive(chars, index+1, count+1);
			case ']':
				// if ] split and decrease on one but not the other and check rest.
				return isBalancedRecursive(chars, index+1, count)
						|| isBalancedRecursive(chars, index+1, count-1);
//			case 'X':
				// if X increase with 1, decrease with 1 or leave as it is
	//			return isBalancedRecursive(chars, index+1, count)
		//				|| isBalancedRecursive(chars, index+1, count+1)
			//			|| isBalancedRecursive(chars, index+1, count-1);
			default:
				throw new RuntimeException("unheard of character: " + current);
		}
	}