object Solution { def nextMove(xdist:Int, ydist:Int):(String,Int,Int) = { var result: (String, Int, Int) = null if(ydist==0){ if(xdist>0) result = ("R", 2,0) else if(xdist<0) result = ("L",-2,0) }else if(ydist>0){ if(xdist<=0) result = ("UL",-1,2) else if(xdist>0) result = ("UR",1,2) }else if(ydist<0){ if(xdist>=0) result = ("LR",1,-2) else if(xdist<0) result = ("LL",-1,-2) } return(result) } def printShortestPath(n: Int, i_start: Int, j_start: Int, i_end: Int, j_end: Int) = { var xdist = j_end-j_start var ydist = -1*(i_end-i_start) var steps:Array[String] = Array() if(ydist%2!=0) println("Impossible") else if(math.abs((ydist/2)%2) != math.abs(xdist%2)) println("Impossible") else { while(ydist!=0 || xdist !=0){ var result = nextMove(xdist,ydist) steps = steps :+ result._1 xdist = xdist - result._2 ydist = ydist - result._3 // println("step taken: "+result._1+"; new xdist: "+xdist+"; new ydist"+ydist) } println(steps.length) println(steps.mkString(" ")) } } def main(args: Array[String]) { val sc = new java.util.Scanner (System.in); var n = sc.nextInt(); var i_start = sc.nextInt(); var j_start = sc.nextInt(); var i_end = sc.nextInt(); var j_end = sc.nextInt(); printShortestPath(n, i_start, j_start, i_end, j_end); } }