← Home
For problem statement at 1000-1999/1500-1599/1540-1549/1542/problemE1.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1540-1549/1542/verifierE1.go ends with All tests passed can you fix the verifier? package main

import (
	"fmt"
)

func main() {
	var n int
	var mod int64
	if _, err := fmt.Scan(&n, &mod); err != nil {
		return
	}

	dp := make([][]int64, n+1)
	for i := range dp {
		dp[i] = make([]int64, n*(n-1)/2+1)
	}
	dp[0][0] = 1
	for k := 1; k <= n; k++ {
		maxJ := k * (k - 1) / 2
		for j := 0; j <= maxJ; j++ {
			for x := 0; x < k && x <= j; x++ {
				dp[k][j] = dp[k][j] + dp[k-1][j-x]
				if dp[k][j] >= mod {
					dp[k][j] -= mod
				}
			}
		}
	}

	var ans int64 = 0
	for k := 0; k < n; k++ {
		var ways int64 = 1
		for j := k + 2; j <= n; j++ {
			ways = (ways * int64(j)) % mod
		}

		maxV := k * (k - 1) / 2
		suf := make([]int64, maxV+2)
		for u := maxV; u >= 0; u-- {
			suf[u] = suf[u+1] + dp[k][u]
			if suf[u] >= mod {
				suf[u] -= mod
			}
		}

		var sumD int64 = 0
		for d := 1; d <= k; d++ {
			var factor int64 = int64(k + 1 - d)
			var pairSum int64 = 0
			for v := 0; v <= maxV; v++ {
				if v+d+1 <= maxV {
					pairSum = (pairSum + dp[k][v]*suf[v+d+1]) % mod
				}
			}
			sumD = (sumD + factor*pairSum) % mod
		}
		ans = (ans + ways*sumD) % mod
	}

	fmt.Println(ans)
}