← Home
For problem statement at 0-999/700-799/770-779/777/problemD.txt this is a correct solution, but verifier at 0-999/700-799/770-779/777/verifierD.go ends with case 2 failed: expected
#pz
#sidjar
got
#
#sidjar
input:
2
#pz
#sidjar
exit status 1 can you fix the verifier? ```go
package main

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

type Node struct {
	next   [26]int
	parent int
	ch     byte
	depth  int
}

func lcpDepth(nodes []Node, a, b int) int {
	da, db := nodes[a].depth, nodes[b].depth
	for da > db {
		a = nodes[a].parent
		da--
	}
	for db > da {
		b = nodes[b].parent
		db--
	}
	for a != b {
		a = nodes[a].parent
		b = nodes[b].parent
		da--
	}
	return da
}

func buildString(nodes []Node, v int) string {
	if v == 0 {
		return "#"
	}
	buf := make([]byte, nodes[v].depth+1)
	buf[0] = '#'
	i := nodes[v].depth
	for v != 0 {
		buf[i] = nodes[v].ch
		v = nodes[v].parent
		i--
	}
	return string(buf)
}

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n int
	fmt.Fscan(in, &n)
	s := make([]string, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(in, &s[i])
	}

	nodes := make([]Node, 1, 500000+5)
	for i := 0; i < 26; i++ {
		nodes[0].next[i] = -1
	}
	nodes[0].parent = -1
	nodes[0].depth = 0

	endNode := make([]int, n)

	for i := 0; i < n; i++ {
		cur := 0
		str := s[i]
		for j := 1; j < len(str); j++ {
			c := str[j] - 'a'
			nxt := nodes[cur].next[c]
			if nxt == -1 {
				nxt = len(nodes)
				var nd Node
				for k := 0; k < 26; k++ {
					nd.next[k] = -1
				}
				nd.parent = cur
				nd.ch = str[j]
				nd.depth = nodes[cur].depth + 1
				nodes = append(nodes, nd)
				nodes[cur].next[c] = nxt
			}
			cur = nxt
		}
		endNode[i] = cur
	}

	need := make([]int, n)
	need[n-1] = endNode[n-1]

	for i := n - 2; i >= 0; i-- {
		a, b := endNode[i], need[i+1]
		d := lcpDepth(nodes, a, b)
		cur := a
		for nodes[cur].depth > d {
			cur = nodes[cur].parent
		}
		need[i] = cur
	}

	for i := 0; i < n; i++ {
		fmt.Fprintln(out, buildString(nodes, need[i]))
	}
}
```