#include <bits/stdc++.h>
using namespace std;
struct cell {
  int no2, no5, no0;
  char move;
};
cell sol1[1000 + 10][1000 + 10], sol2[1000 + 10][1000 + 10],
    mat[1000 + 10][1000 + 10];
char path[10000];
int pi, zx;
void printMoves(cell sol[][1000 + 10], char path[], int n, int m) {
  if (n < 0 || m < 0) return;
  if (n == 0 && m == 0) return;
  if (sol[n][m].move == 1) {
    path[pi++] = 'D';
    printMoves(sol, path, n - 1, m);
  } else if (sol[n][m].move == 2) {
    path[pi++] = 'R';
    printMoves(sol, path, n, m - 1);
  } else
    printf("ERROR");
}
void solve(cell sol[][1000 + 10], int n, int flag) {
  sol[0][0].no2 = mat[0][0].no2;
  sol[0][0].no5 = mat[0][0].no5;
  int i, j;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      if (i > 0 && j == 0) {
        sol[i][j].no2 = sol[i - 1][j].no2 + mat[i][j].no2;
        sol[i][j].no5 = sol[i - 1][j].no5 + mat[i][j].no5;
        sol[i][j].move = 1;
      } else if (i == 0 && j > 0) {
        sol[i][j].no2 = sol[i][j - 1].no2 + mat[i][j].no2;
        sol[i][j].no5 = sol[i][j - 1].no5 + mat[i][j].no5;
        sol[i][j].move = 2;
      } else if (i > 0 && j > 0) {
        int c2 = 0, c5 = 0;
        c2 = mat[i][j].no2;
        c5 = mat[i][j].no5;
        if (flag) {
          if (sol[i][j - 1].no2 < sol[i - 1][j].no2) {
            sol[i][j].no2 = sol[i][j - 1].no2 + c2;
            sol[i][j].move = 2;
          } else {
            sol[i][j].no2 = sol[i - 1][j].no2 + c2;
            sol[i][j].move = 1;
          }
        } else {
          if (sol[i][j - 1].no5 < sol[i - 1][j].no5) {
            sol[i][j].no5 = sol[i][j - 1].no5 + c5;
            sol[i][j].move = 2;
          } else {
            sol[i][j].no5 = sol[i - 1][j].no5 + c5;
            sol[i][j].move = 1;
          }
        }
      }
    }
  }
}
int main() {
  int n, zi, zj;
  scanf("%d", &n);
  int i, j, zero = 0;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      scanf("%d", &mat[i][j].no0);
      if (mat[i][j].no0 == 0) {
        zero = 1;
        mat[i][j].no0 = 100;
        zi = i;
        zj = j;
      }
      while (mat[i][j].no0 && mat[i][j].no0 % 2 == 0) {
        mat[i][j].no2++;
        mat[i][j].no0 /= 2;
      }
      while (mat[i][j].no0 && mat[i][j].no0 % 5 == 0) {
        mat[i][j].no5++;
        mat[i][j].no0 /= 5;
      }
    }
  }
  solve(sol1, n, 0);
  solve(sol2, n, 1);
  --n;
  int c1 = sol1[n][n].no5;
  int c2 = sol2[n][n].no2;
  int k;
  if (c1 < c2)
    printMoves(sol1, path, n, n);
  else
    printMoves(sol2, path, n, n);
  int ans;
  ans = min(c1, c2);
  if (ans > 0 && zero == 1) {
    printf("1\n");
    for (i = 0; i < zi; i++) putchar('D');
    for (i = 0; i < zj; i++) putchar('R');
    for (i = zi; i < n; i++) putchar('D');
    for (i = zj; i < n; i++) putchar('R');
    return 0;
  }
  printf("%d\n", ans);
  for (i = pi - 1; i >= 0; i--) putchar(path[i]);
  puts("");
  return 0;
}
