import java.io.* import java.util.* fun main(args: Array) { val sc = Scanner(System.`in`) val n = sc.nextInt() val distTo = Array(n, { IntArray(n, { Int.MAX_VALUE })}) val pathTo = Array(n, { Array(n, { "" })}) val start = Position(sc.nextInt(), sc.nextInt(), "") val end = Position(sc.nextInt(), sc.nextInt(), "") distTo[start.i][start.j] = 0 // val queue = PriorityQueue({ o1, o2 -> distTo[o1.i][o1.j].compareTo(distTo[o2.i][o2.j]) }) val queue = LinkedList() // queue.offer(start) queue.add(start) while(!queue.isEmpty()) { // val position = queue.poll() val position = queue.removeFirst() val dist = distTo[position.i][position.j] val path = pathTo[position.i][position.j] for(f in position.following()) { if(f.i < 0 || f.j < 0 || f.i >= n || f.j >= n) { continue } if(distTo[f.i][f.j] > dist + 1) { distTo[f.i][f.j] = dist + 1 pathTo[f.i][f.j] = if(path == "") f.m else "$path ${f.m}" queue.offer(f) } } } if(distTo[end.i][end.j] == Int.MAX_VALUE) { println("Impossible") } else { println(distTo[end.i][end.j]) println(pathTo[end.i][end.j]) } } class Position(val i: Int, val j: Int, val m: String) { fun following(): List { return listOf(Position(i - 2, j - 1, "UL"), Position(i - 2, j + 1, "UR"), Position(i, j + 2, "R"), Position(i + 2, j + 1, "LR"), Position(i + 2, j - 1, "LL"), Position(i, j - 2, "L") ) } override fun equals(other: Any?): Boolean { if (this === other) return true if (javaClass != other?.javaClass) return false other as Position if (i != other.i) return false if (j != other.j) return false return true } }