← Home
```go
package main

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

func nextInt(data []byte, idx *int) int {
	n := len(data)
	for *idx < n && (data[*idx] < '0' || data[*idx] > '9') {
		*idx = *idx + 1
	}
	num := 0
	for *idx < n && data[*idx] >= '0' && data[*idx] <= '9' {
		num = num*10 + int(data[*idx]-'0')
		*idx = *idx + 1
	}
	return num
}

func main() {
	data, _ := io.ReadAll(os.Stdin)
	idx := 0
	n := nextInt(data, &idx)
	a := make([]int, n)
	for i := 0; i < n; i++ {
		a[i] = nextInt(data, &idx)
	}

	l, r := 0, n-1
	last := 0
	res := make([]byte, 0, n)

	for l <= r {
		leftOK := a[l] > last
		rightOK := a[r] > last

		if !leftOK && !rightOK {
			break
		}

		if leftOK && !rightOK {
			last = a[l]
			l++
			res = append(res, 'L')
		} else if !leftOK && rightOK {
			last = a[r]
			r--
			res = append(res, 'R')
		} else {
			if a[l] < a[r] {
				last = a[l]
				l++
				res = append(res, 'L')
			} else if a[l] > a[r] {
				last = a[r]
				r--
				res = append(res, 'R')
			} else {
				x := a[l]

				lenL := 1
				prev := x
				for i := l + 1; i <= r; i++ {
					if a[i] > prev {
						lenL++
						prev = a[i]
					} else {
						break
					}
				}

				lenR := 1
				prev = x
				for i := r - 1; i >= l; i-- {
					if a[i] > prev {
						lenR++
						prev = a[i]
					} else {
						break
					}
				}

				if lenL >= lenR {
					for i := 0; i < lenL; i++ {
						res = append(res, 'L')
					}
				} else {
					for i := 0; i < lenR; i++ {
						res = append(res, 'R')
					}
				}
				break
			}
		}
	}

	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	fmt.Fprintln(out, len(res))
	fmt.Fprintln(out, string(res))
	out.Flush()
}
```