package writer; import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.Arrays; import java.util.Queue; import java.util.Scanner; public class FromClosestSubmission { static Scanner in; static PrintWriter out; static String INPUT = ""; static int n = 105, m = 105; static int[] dr = { 1, 0, -1, 0 }; static int[] dc = { 0, 1, 0, -1 }; static void solve() { char[][] map = new char[n][m]; int r = 52, c = 52; map[r][c] = '.'; int dir = 0; while(true){ int dist = read(); if(dist > 100 || dist == -1){ // found the goal while(dist != -1){ out.println("F"); out.flush(); dist = read(); } return; } for(int i = 0, vr = r, vc = c;i <= dist;i++, vr += dr[dir], vc += dc[dir]){ map[vr][vc] = '.'; } map[r+(dist+1)*dr[dir]][c+(dist+1)*dc[dir]] = '#'; int[] closest = closestUnknown(r, c, dir, map); if(closest[2] == 1){ r += dr[dir]; c += dc[dir]; }else if(closest[2] == 2){ r -= dr[dir]; c -= dc[dir]; }else if(closest[2] == 3){ dir = dir+1&3; }else if(closest[2] == 4){ dir = dir+3&3; } out.println("FBLR".charAt(closest[2]-1)); out.flush(); } } static int read() { String z = in.next(); if(z.charAt(0) >= '0' && z.charAt(0) <= '9')return Integer.parseInt(z); return -1; } static int[] closestUnknown(int sr, int sc, int sdir, char[][] map) { int[][][] d = new int[n][m][4]; int[][][] prev = new int[n][m][4]; Queue q = new ArrayDeque<>(); int I = 99999999; for(int i = 0;i < n;i++){ for(int j = 0;j < m;j++){ for(int k = 0;k < 4;k++){ d[i][j][k] = I; prev[i][j][k] = -1; } } } q.add(new int[]{sr, sc, sdir}); d[sr][sc][sdir] = 0; while(!q.isEmpty()){ int[] cur = q.poll(); int r = cur[0], c = cur[1], dir = cur[2]; if(map[r][c] == 0){ int vr = r, vc = c, vdir = dir; int last = -2; while(prev[vr][vc][vdir] != -1){ last = prev[vr][vc][vdir]; if(prev[vr][vc][vdir] == 1){ vr -= dr[vdir]; vc -= dc[vdir]; }else if(prev[vr][vc][vdir] == 2){ vr += dr[vdir]; vc += dc[vdir]; }else if(prev[vr][vc][vdir] == 3){ vdir = vdir+3&3; }else if(prev[vr][vc][vdir] == 4){ vdir = vdir+1&3; } } return new int[]{r, c, last}; } // forward { int nr = r + dr[dir], nc = c + dc[dir], ndir = dir; if(d[nr][nc][ndir] > d[r][c][dir] + 1 && map[nr][nc] != '#'){ d[nr][nc][ndir] = d[r][c][dir] + 1; prev[nr][nc][ndir] = 1; q.add(new int[]{nr, nc, ndir}); } } // // backward // { // int nr = r - dr[dir], nc = c - dc[dir], ndir = dir; // if(d[nr][nc][ndir] > d[r][c][dir] + 1){ // d[nr][nc][ndir] = d[r][c][dir] + 1; // prev[nr][nc][ndir] = 2; // q.add(new int[]{nr, nc, ndir}); // } // } // rotate left { int nr = r, nc = c, ndir = dir+1&3; if(d[nr][nc][ndir] > d[r][c][dir] + 1){ d[nr][nc][ndir] = d[r][c][dir] + 1; prev[nr][nc][ndir] = 3; q.add(new int[]{nr, nc, ndir}); } } // rotate right { int nr = r, nc = c, ndir = dir+3&3; if(d[nr][nc][ndir] > d[r][c][dir] + 1){ d[nr][nc][ndir] = d[r][c][dir] + 1; prev[nr][nc][ndir] = 4; q.add(new int[]{nr, nc, ndir}); } } } return null; } public static void main(String[] args) throws Exception { in = INPUT.isEmpty() ? new Scanner(System.in) : new Scanner(INPUT); out = new PrintWriter(System.out); solve(); out.flush(); } static int ni() { return Integer.parseInt(in.next()); } static long nl() { return Long.parseLong(in.next()); } static double nd() { return Double.parseDouble(in.next()); } static void tr(Object... o) { if(INPUT.length() != 0)System.out.println(Arrays.deepToString(o)); } }