```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
}
```