Your program should perform parentheses matching on a given string to verify that the parentheses are balanced. It should print "True" if the match is good and "False" if the match is bad.
The input will be a string with 3 different kinds of parentheses - { }, [ ], ( )
Examples:
Valid: (returns True)
abc{def}ghi(jkl)mno[pqr]
a{([b])}
Invalid: (returns False)
abc{(def})
ab[c)
abc}def{
Bonus Points for solutions that do not use extra memory (ex. mutable variables) to store state.