← Home
```go
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	s, _ := reader.ReadString('\n')
	s = s[:len(s)-1]
	n := len(s)
	t := make([]byte, n)
	i := 0
	for i < n {
		if s[i] == '0' {
			for ; i < n && s[i] == '0'; i++ {
				t[i] = '0'
			}
			continue
		}
		start := i
		for ; i < n && s[i] == '1'; i++ {}
		l1 := i - start
		l0 := 0
		k := i
		for ; k < n && s[k] == '0'; k++ {
			l0++
		}
		keep := 0
		if l0 > 0 {
			keep = min(l1, l0)
		}
		keep_start := start + l1 - keep
		for p := start; p < keep_start; p++ {
			t[p] = '0'
		}
		for p := keep_start; p < start + l1; p++ {
			t[p] = '1'
		}
		for p := i; p < i + l0; p++ {
			t[p] = '0'
		}
		i += l0
	}
	fmt.Println(string(t))
}

func min(a, b int) int {
	if a < b {
		return a
	}
	return b
}
```