def isParenthesis(c): return ((c == '(') or (c == ')')) def isValidString(str): cnt = 0 for i in range(len(str)): if (str[i] == '('): cnt += 1 elif (str[i] == ')'): cnt -= 1 if (cnt < 0): return False return (cnt == 0) # method to remove invalid parenthesis def removeInvalidParenthesis(str): if (len(str) == 0): return visit = set() q = [] temp = 0 level = 0 q.append(str) visit.add(str) while(len(q)): str = q[0] q.pop(0) if (isValidString(str)): print(str) level = True if (level): continue for i in range(len(str)): if (not isParenthesis(str[i])): continue temp = str[0:i] + str[i + 1:] if temp not in visit: q.append(temp) visit.add(temp) expression = "()())()" removeInvalidParenthesis(expression) expression = "()v)" removeInvalidParenthesis(expression)