#!/usr/bin/env python get_idx = lambda s, c, dv=-1: s.index( c ) if c in s else dv def split_br( s ): i = get_idx( s, '(' ) j = get_idx( s, ')' ) if i < 0 or j < 0 or j < i: return s h = s[ : i ] h = [ h ] if h else [] t = s[ i + 1 : ] r = split_br( t ) if r == t: r = [ r ] t = r[ -1 ] i = get_idx( t, '(' ) j = get_idx( t, ')' ) if j < 0 or ( i >= 0 and i < j ): return s ( t2, t ) = ( t[ : j ], t[ j + 1 : ] ) t2 = [ t2 ] if t2 else [] m = r[ : -1 ] + t2 r = split_br( t ) if r == t: r = [ r ] if r else [] return h + [ m ] + r def join_br( lst ): def cv( e, add_br=True ): if type( e ) == list: s = ''.join( map( cv, e ) ) if add_br: s = '(' + s + ')' return s return e return cv( lst, False )