← Home
 ```go
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	s, _ := reader.ReadString('\n')
	s = s[:len(s)-1]
	if len(s) > 0 && s[len(s)-1] == '\r' {
		s = s[:len(s)-1]
	}
	n := len(s)
	
	g := make([]int, n+1)
	for i := 0; i < n; i++ {
		if s[i] == '0' {
			g[i+1] = g[i] + 1
		} else {
			g[i+1] = g[i] - 1
		}
	}
	
	prefMax := make([]int, n+1)
	suffMax := make([]int, n+2)
	
	prefMax[0] = g[0]
	for i := 1; i <= n; i++ {
		if g[i] > prefMax[i-1] {
			prefMax[i] = g[i]
		} else {
			prefMax[i] = prefMax[i-1]
		}
	}
	
	suffMax[n+1] = -n - 10
	suffMax[n] = g[n]
	for i := n - 1; i >= 0; i-- {
		if g[i] > suffMax[i+1] {
			suffMax[i] = g[i]
		} else {
			suffMax[i] = suffMax[i+1]
		}
	}
	
	t := make([]byte, n)
	for i := 0; i < n; i++ {
		if s[i] == '0' {
			t[i] = '0'
		} else {
			if g[i+1] == prefMax[i+1] || g[i+1] == suffMax[i+1] {
				t[i] = '1'
			} else {
				t[i] = '0'
			}
		}
	}
	
	fmt.Println(string(t))
}
```