← Home
```go
package main

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

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

	var X, Y, x0, y0 int
	line, _ := in.ReadString('\n')
	fmt.Sscan(line, &X, &Y, &x0, &y0)

	s, _ := in.ReadString('\n')
	s = strings.TrimSpace(s)

	n := len(s)
	ans := make([]int, n+1)
	visited := make([]bool, (X+1)*(Y+1))
	stride := Y + 1

	currX, currY := x0, y0
	visited[currX*stride+currY] = true
	ans[0] = 1
	distinct := 1

	for k := 0; k < n; k++ {
		switch s[k] {
		case 'L':
			if currY > 1 {
				currY--
			}
		case 'R':
			if currY < Y {
				currY++
			}
		case 'U':
			if currX > 1 {
				currX--
			}
		case 'D':
			if currX < X {
				currX++
			}
		}

		idx := currX*stride + currY
		if !visited[idx] {
			visited[idx] = true
			ans[k+1]++
			distinct++
		}
	}

	ans[n] += (X*Y - distinct)

	for i := 0; i <= n; i++ {
		if i > 0 {
			out.WriteByte(' ')
		}
		fmt.Fprint(out, ans[i])
	}
	out.WriteByte('\n')
}
```