← Home
package main

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

func main() {
	data, _ := io.ReadAll(os.Stdin)
	pos := 0
	nextInt := func() int {
		for pos < len(data) && (data[pos] < '0' || data[pos] > '9') {
			pos++
		}
		val := 0
		for pos < len(data) && data[pos] >= '0' && data[pos] <= '9' {
			val = val*10 + int(data[pos]-'0')
			pos++
		}
		return val
	}

	n := nextInt()
	size := n * n
	const INF int32 = 1 << 30

	dp2 := make([]int32, size)
	dp5 := make([]int32, size)
	p2 := make([]byte, size)
	p5 := make([]byte, size)

	zr, zc := -1, -1

	for i := 0; i < n; i++ {
		base := i * n
		for j := 0; j < n; j++ {
			x := nextInt()
			var c2, c5 int32

			if x == 0 {
				if zr == -1 {
					zr, zc = i, j
				}
				c2, c5 = INF, INF
			} else {
				y := x
				for y&1 == 0 {
					c2++
					y >>= 1
				}
				y = x
				for y%5 == 0 {
					c5++
					y /= 5
				}
			}

			id := base + j
			if i == 0 && j == 0 {
				dp2[id] = c2
				dp5[id] = c5
			} else if i == 0 {
				dp2[id] = dp2[id-1] + c2
				dp5[id] = dp5[id-1] + c5
				p2[id] = 'L'
				p5[id] = 'L'
			} else if j == 0 {
				dp2[id] = dp2[id-n] + c2
				dp5[id] = dp5[id-n] + c5
				p2[id] = 'U'
				p5[id] = 'U'
			} else {
				if dp2[id-n] < dp2[id-1] {
					dp2[id] = dp2[id-n] + c2
					p2[id] = 'U'
				} else {
					dp2[id] = dp2[id-1] + c2
					p2[id] = 'L'
				}

				if dp5[id-n] < dp5[id-1] {
					dp5[id] = dp5[id-n] + c5
					p5[id] = 'U'
				} else {
					dp5[id] = dp5[id-1] + c5
					p5[id] = 'L'
				}
			}
		}
	}

	last := size - 1
	ans := dp2[last]
	use2 := true
	if dp5[last] < dp2[last] {
		ans = dp5[last]
		use2 = false
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	if zr != -1 && ans > 1 {
		fmt.Fprintln(out, 1)
		path := make([]byte, 0, 2*n-2)
		for i := 0; i < zr; i++ {
			path = append(path, 'D')
		}
		for j := 0; j < zc; j++ {
			path = append(path, 'R')
		}
		for i := zr; i < n-1; i++ {
			path = append(path, 'D')
		}
		for j := zc; j < n-1; j++ {
			path = append(path, 'R')
		}
		fmt.Fprintln(out, string(path))
		return
	}

	parent := p2
	if !use2 {
		parent = p5
	}

	path := make([]byte, 2*n-2)
	i, j := n-1, n-1
	k := len(path) - 1
	for i > 0 || j > 0 {
		if parent[i*n+j] == 'U' {
			path[k] = 'D'
			i--
		} else {
			path[k] = 'R'
			j--
		}
		k--
	}

	fmt.Fprintln(out, ans)
	fmt.Fprintln(out, string(path))
}