← Home
package main

import (
	"bufio"
	"os"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	buf := make([]byte, 2*1024*1024)
	scanner.Buffer(buf, 2*1024*1024)

	if !scanner.Scan() {
		return
	}

	var ans []byte
	for scanner.Scan() {
		w := scanner.Bytes()
		if len(ans) == 0 {
			ans = append(ans, w...)
			continue
		}

		pi := make([]int, len(w))
		for i := 1; i < len(w); i++ {
			j := pi[i-1]
			for j > 0 && w[i] != w[j] {
				j = pi[j-1]
			}
			if w[i] == w[j] {
				j++
			}
			pi[i] = j
		}

		L := len(ans)
		if L > len(w) {
			L = len(w)
		}

		sPrime := ans[len(ans)-L:]
		j := 0
		for i := 0; i < len(sPrime); i++ {
			for j > 0 && sPrime[i] != w[j] {
				j = pi[j-1]
			}
			if sPrime[i] == w[j] {
				j++
			}
		}

		ans = append(ans, w[j:]...)
	}

	writer := bufio.NewWriter(os.Stdout)
	writer.Write(ans)
	writer.WriteByte('\n')
	writer.Flush()
}