← Home
```go
package main

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

func main() {
	in := bufio.NewReader(os.Stdin)
	var a, b, c, d int
	fmt.Fscan(in, &a, &b, &c, &d)

	n, m := 50, 50
	grid := make([][]byte, n)
	for i := 0; i < n; i++ {
		grid[i] = make([]byte, m)
	}

	for i := 0; i < 25; i++ {
		for j := 0; j < 25; j++ {
			grid[i][j] = 'A'
		}
		for j := 25; j < 50; j++ {
			grid[i][j] = 'B'
		}
	}
	for i := 25; i < 50; i++ {
		for j := 0; j < 25; j++ {
			grid[i][j] = 'C'
		}
		for j := 25; j < 50; j++ {
			grid[i][j] = 'D'
		}
	}

	remA, remB, remC, remD := a-1, b-1, c-1, d-1

	put := func(r0, r1, c0, c1 int, ch byte, rem *int) {
		for i := r0 + 1; i < r1 && *rem > 0; i += 2 {
			for j := c0 + 1; j < c1 && *rem > 0; j += 2 {
				grid[i][j] = ch
				(*rem)--
			}
		}
	}

	put(0, 25, 0, 25, 'D', &remD)
	put(0, 25, 25, 50, 'C', &remC)
	put(25, 50, 0, 25, 'B', &remB)
	put(25, 50, 25, 50, 'A', &remA)

	out := bufio.NewWriter(os.Stdout)
	fmt.Fprintf(out, "%d %d\n", n, m)
	for i := 0; i < n; i++ {
		out.Write(grid[i])
		out.WriteByte('\n')
	}
	out.Flush()
}
```