// No.1469 programing package main import ( "bufio" "io" "os" ) func main() { Solve() } func Solve() { cpr := NewComProReader(os.Stdin) last := byte(' ') wbuf := make([]byte, 5_000_000+2) wlen := 0 for !cpr.EOF { for _, b := range cpr.Slice() { if last != b { wbuf[wlen] = b wlen++ } last = b } } wr := bufio.NewWriter(os.Stdout) wr.Write(wbuf[:wlen]) wr.Flush() } // ComProReader const BUFFER_SIZE = 64 * 1024 type ComProReader struct { reader *bufio.Reader buffer []byte length int index int EOF bool } func NewComProReader(r io.Reader) *ComProReader { cpr := new(ComProReader) cpr.reader = bufio.NewReader(r) cpr.buffer = make([]byte, BUFFER_SIZE) cpr.index = 0 cpr.length = 0 cpr.read_next_block() return cpr } func (cpr *ComProReader) read_next_block() { if cpr.index >= cpr.length { len, err := cpr.reader.Read(cpr.buffer) if err == io.EOF { cpr.EOF = true } else if err != nil { panic(err) } cpr.index = 0 cpr.length = len } } func (cpr *ComProReader) Byte() (result byte) { cpr.read_next_block() result = cpr.buffer[cpr.index] cpr.index++ return } func (cpr *ComProReader) Slice() (result []byte) { cpr.read_next_block() result = cpr.buffer[cpr.index:cpr.length] cpr.index = cpr.length return } func (cpr *ComProReader) Int() int { c := cpr.Byte() for c == ' ' || c == '\n' || c == '\t' { c = cpr.Byte() } sign := 1 if c == '-' { sign = -1 c = cpr.Byte() } v := 0 for '0' <= c && c <= '9' { v = 10*v + int(c-'0') c = cpr.Byte() } return v * sign } func (cpr *ComProReader) Uint() uint { c := cpr.Byte() for c == ' ' || c == '\n' || c == '\t' { c = cpr.Byte() } v := uint(0) for '0' <= c && c <= '9' { v = 10*v + uint(c-'0') c = cpr.Byte() } return v }