struct Node { int p; Node next } struct Stack { int size; Node head; (Stack, int) -> Stack push; (Stack) -> Stack pop; (Stack) -> int peek } Stack push(Stack stack, int paren) { var n = new Node {p = paren; next = stack.head}; return new Stack {size = stack.size + 1; head = n; push = stack.push; pop = stack.pop; peek = stack.peek}; } Stack pop(Stack stack) { if (stack.size == 0) { return Stack null; } return new Stack{size = stack.size - 1; head = stack.head.next; push = stack.push; pop = stack.pop; peek = stack.peek}; } int peek(Stack stack) { if (stack.size == 0) { return -1; } return stack.head.p; } global leftParen = 40; global leftBracket = 91; global leftBrace = 123; global rightParen = 41; global rightBracket = 93; global rightBrace = 125; bool isStringBalanced(string input) { var stack = new Stack {size = 0; head = Node null; push = push; pop = pop; peek = peek}; var length = length_of_string(input); var char_arr = array_of_string(input); var result = new int[2*length]; var ptr = 0; for (var i = 0; i < length; i = i + 1;) { var char = char_arr[i]; if (char == leftParen | char == leftBracket | char == leftBrace) { stack = stack.push(stack, char); } else if (char == rightParen) { var head = stack.peek(stack); stack = stack.pop(stack); if (head != leftParen) { print_string("mismatch"); return false; } result[ptr] = leftParen; ptr = ptr + 1; result[ptr] = rightParen; ptr = ptr + 1; } else if (char == rightBracket) { var head = stack.peek(stack); stack = stack.pop(stack); if (head != leftBracket) { print_string("mismatch"); return false; } result[ptr] = leftBracket; ptr = ptr + 1; result[ptr] = rightBracket; ptr = ptr + 1; } else if (char == rightBrace) { var head = stack.peek(stack); stack = stack.pop(stack); if (head != leftBrace) { print_string("mismatch"); return false; } result[ptr] = leftBrace; ptr = ptr + 1; result[ptr] = rightBrace; ptr = ptr + 1; } } if (stack.size != 0) { print_string("mismatch"); return false; } var finalString = new int[ptr]; for (var i = 0; i < ptr; i = i + 1;) { finalString[i] = result[i]; } print_string(string_of_array(finalString)); return true; } int program(int argc, string[] argv) { var result = isStringBalanced(argv[1]); if (result) { return 1; } return 0; }