← Home
For problem statement at 1000-1999/1900-1999/1970-1979/1973/problemE.txt this is a correct solution, but verifier at 1000-1999/1900-1999/1970-1979/1973/verifierE.go ends with All tests passed can you fix the verifier? ```go
package main

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

func solve() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var t int
	fmt.Fscan(reader, &t)

	for i := 0; i < t; i++ {
		var n int
		fmt.Fscan(reader, &n)

		p := make([]int, n+1)
		M := []int{}
		for j := 1; j <= n; j++ {
			fmt.Fscan(reader, &p[j])
			if p[j] != j {
				M = append(M, j)
			}
		}

		if len(M) == 0 {
			ans := int64(2*n) * int64(2*n+1) / 2
			fmt.Fprintln(writer, ans)
			continue
		}

		L_max := 2 * n
		R_min := 1

		for _, x := range M {
			min_p := 1
			if x == 1 {
				min_p = 2
			}
			max_p := n
			if x == n {
				max_p = n - 1
			}

			if x+max_p < L_max {
				L_max = x + max_p
			}
			if x+min_p > R_min {
				R_min = x + min_p
			}
		}

		ans := int64(0)
		for r := R_min; r <= 2*n; r++ {
			limit := L_max
			if r-1 < limit {
				limit = r - 1
			}
			if limit >= 1 {
				ans += int64(limit)
			}
		}

		isValid := true
		sum := -1
		for _, x := range M {
			if sum == -1 {
				sum = x + p[x]
			} else if x+p[x] != sum {
				isValid = false
				break
			}
			if p[p[x]] != x {
				isValid = false
				break
			}
		}

		if isValid && sum != -1 {
			ans++
		}

		fmt.Fprintln(writer, ans)
	}
}

func main() {
	solve()
}
```