← Home
For problem statement at 0-999/800-899/880-889/886/problemD.txt this is a correct solution, but verifier at 0-999/800-899/880-889/886/verifierD.go ends with All tests passed can you fix the verifier? ```go
package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strconv"
	"strings"
)

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

	if !scanner.Scan() {
		return
	}
	n, _ := strconv.Atoi(scanner.Text())

	present := make([]bool, 26)
	nextChar := make([]int, 26)
	prevChar := make([]int, 26)
	for i := 0; i < 26; i++ {
		nextChar[i] = -1
		prevChar[i] = -1
	}

	for i := 0; i < n; i++ {
		if !scanner.Scan() {
			break
		}
		s := scanner.Text()
		for j := 0; j < len(s); j++ {
			present[s[j]-'a'] = true
		}
		for j := 0; j < len(s)-1; j++ {
			u := int(s[j] - 'a')
			v := int(s[j+1] - 'a')
			if nextChar[u] != -1 && nextChar[u] != v {
				fmt.Println("NO")
				return
			}
			if prevChar[v] != -1 && prevChar[v] != u {
				fmt.Println("NO")
				return
			}
			nextChar[u] = v
			prevChar[v] = u
		}
	}

	visited := make([]bool, 26)
	var paths []string

	for i := 0; i < 26; i++ {
		if present[i] && prevChar[i] == -1 {
			var path []byte
			curr := i
			for curr != -1 {
				if visited[curr] {
					break
				}
				visited[curr] = true
				path = append(path, byte(curr+'a'))
				curr = nextChar[curr]
			}
			paths = append(paths, string(path))
		}
	}

	for i := 0; i < 26; i++ {
		if present[i] && !visited[i] {
			fmt.Println("NO")
			return
		}
	}

	sort.Strings(paths)
	fmt.Println(strings.Join(paths, ""))
}
```