← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	s, _ := reader.ReadString('\n')
	s = strings.TrimSpace(s)
	n := len(s)
	if n == 0 {
		return
	}

	balances := make([]int, n)
	curr := 0
	maxBal := 0

	for i := 0; i < n; i++ {
		balances[i] = curr
		if curr > maxBal {
			maxBal = curr
		}
		if s[i] == '(' {
			curr++
		} else {
			curr--
		}
	}

	buckets := make([][]byte, maxBal+1)
	for i := n - 1; i >= 0; i-- {
		b := balances[i]
		buckets[b] = append(buckets[b], s[i])
	}

	var sb strings.Builder
	sb.Grow(n)
	for _, bucket := range buckets {
		sb.Write(bucket)
	}

	fmt.Println(sb.String())
}