← Home
For problem statement at 1000-1999/1500-1599/1550-1559/1551/problemD2.txt this is a correct solution, but verifier at 1000-1999/1500-1599/1550-1559/1551/verifierD2.go ends with All 43 tests passed. can you fix the verifier? package main

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

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

	var t int
	if _, err := fmt.Fscan(reader, &t); err != nil {
		return
	}

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

		possible := false
		if n%2 == 1 {
			if k >= m/2 && (k-m/2)%2 == 0 {
				possible = true
			}
		} else if m%2 == 1 {
			if k%2 == 0 && k <= (m-1)*n/2 {
				possible = true
			}
		} else {
			if k%2 == 0 && k <= n*m/2 {
				possible = true
			}
		}

		if !possible {
			fmt.Fprintln(writer, "NO")
			continue
		}

		fmt.Fprintln(writer, "YES")
		ans := make([][]byte, n)
		for i := 0; i < n; i++ {
			ans[i] = make([]byte, m)
		}

		kLeft := k
		if n%2 == 1 {
			for j := 0; j < m; j += 2 {
				ans[n-1][j] = 'L'
				ans[n-1][j+1] = 'R'
			}
			kLeft -= m / 2
		}
		if m%2 == 1 {
			for i := 0; i < n; i += 2 {
				ans[i][m-1] = 'U'
				ans[i+1][m-1] = 'D'
			}
		}

		for i := 0; i < n/2*2; i += 2 {
			for j := 0; j < m/2*2; j += 2 {
				if kLeft >= 2 {
					ans[i][j] = 'L'
					ans[i][j+1] = 'R'
					ans[i+1][j] = 'L'
					ans[i+1][j+1] = 'R'
					kLeft -= 2
				} else {
					ans[i][j] = 'U'
					ans[i+1][j] = 'D'
					ans[i][j+1] = 'U'
					ans[i+1][j+1] = 'D'
				}
			}
		}

		for i := 0; i < n; i++ {
			for j := 0; j < m; j++ {
				if ans[i][j] == 'L' || ans[i][j] == 'U' {
					r1, c1 := i, j
					var r2, c2 int
					if ans[i][j] == 'L' {
						r2, c2 = i, j+1
					} else {
						r2, c2 = i+1, j
					}

					used := make([]bool, 26)
					check := func(r, c int) {
						if r >= 0 && r < n && c >= 0 && c < m {
							if ans[r][c] >= 'a' && ans[r][c] <= 'z' {
								used[ans[r][c]-'a'] = true
							}
						}
					}

					check(r1-1, c1)
					check(r1+1, c1)
					check(r1, c1-1)
					check(r1, c1+1)

					check(r2-1, c2)
					check(r2+1, c2)
					check(r2, c2-1)
					check(r2, c2+1)

					var c byte
					for c = 'a'; c <= 'z'; c++ {
						if !used[c-'a'] {
							break
						}
					}
					ans[r1][c1] = c
					ans[r2][c2] = c
				}
			}
		}

		for i := 0; i < n; i++ {
			fmt.Fprintln(writer, string(ans[i]))
		}
	}
}