import re
def f(s,i=0):
  t=re.sub(r"^\(*|\)*$","",s)
  u=re.findall("\(*\w+\)*",t)
  print(u)
  
def f(s):
  if s[0]+s[-1]=="()":
    if s[-1]==")":
      return f(s[1:-1])
    else:
      return s
  return s 

# Cases: a(b), (a)b, (a)(b)  

def f(s):
  a,b=s.index("("),s.rindex(")")

def f(s):
  q=r"([^\(\)])"
  t=re.sub(q+r"\(*"+q+"\)*"+q,"",s)

def f(s):
  q=r"\b"
  if m:=re.search(q+".+?"+q,s):
    return m
    
def f(s):
  if m:=re.search(r"[^\(\)]+",s):
    print(m.start(),m.end(),m)
    if m.start()==0:
      pass
    

#print(f("((abc(be)(de)))"))

test={
   "(alpha)":              "alpha",
   "(((([))))":            "[",
   " beta(gamma)":         " beta(gamma)",
   "@lpha((lambda))":      "@lpha(lambda)",
   "(phi((theta)pi))":     "phi((theta)pi)",
   "(sigma)(omega)":       "(sigma)(omega)",
   "(sig(ma)(om)e;a)":     "sig(ma)(om)e;a",
   "(((((a)))b))":         "(a)b",
   "((b(((a)))))":         "b(a)",
   "b((a$c)(def))":        "b((a$c)(def))",
   "x(((y)(z)))":          "x((y)(z))",
   "(foo(bar))baz":        "(foo(bar))baz",
   "foo((bar)baz)":        "foo((bar)baz)",
   "(((((a)(b)))c))":      "((a)(b))c",
   "((c(((b)(a)))))":      "c((b)(a))",
}
for i,o in test.items():
  print(i,"\t\t",f(i))