#include <bits/stdc++.h>
using namespace std;
struct S {
  long long er, wu;
};
const long long inf = 1e10;
long long n, t[1005][1005], num[3000];
S a[1005][1005], dp[1005][1005], ot[1005][1005];
void ct(int x) {
  if (x)
    cout << 'R';
  else
    cout << 'D';
  return;
}
void prt(int u, int x, int y) {
  if (u == 2) {
    if (x == 1 && y == 1) return;
    if (ot[x][y].er)
      prt(2, x, y - 1);
    else
      prt(2, x - 1, y);
    ct(ot[x][y].er);
  }
  if (u == 5) {
    if (x == 1 && y == 1) return;
    if (ot[x][y].wu)
      prt(5, x, y - 1);
    else
      prt(5, x - 1, y);
    ct(ot[x][y].wu);
  }
}
int main() {
  int px, py;
  bool yes = 0;
  scanf("%lld", &n);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      scanf("%lld", &t[i][j]);
      long long x = t[i][j];
      if (x == 0) {
        num[i + j]++;
        a[i][j].er = inf;
        a[i][j].wu = inf;
        yes = 1;
        px = i;
        py = j;
      }
      while (x % 2 == 0 && x) {
        x /= 2;
        a[i][j].er++;
      }
      while (x % 5 == 0 && x) {
        x /= 5;
        a[i][j].wu++;
      }
    }
  }
  for (int i = 2; i <= n + 1; i++) {
    if (num[i] == i - 1 || num[2 * n + 2 - i] == i - 1) {
      printf("1\n");
      for (int k = 1; k < n; k++) cout << "D";
      for (int k = 1; k < n; k++) cout << "R";
      return 0;
    }
  }
  dp[1][1].er = a[1][1].er;
  dp[1][1].wu = a[1][1].wu;
  for (int i = 2; i <= n; i++) {
    dp[i][1].er = dp[i - 1][1].er + a[i][1].er;
    dp[1][i].er = dp[1][i - 1].er + a[1][i].er;
    dp[i][1].wu = dp[i - 1][1].wu + a[i][1].wu;
    dp[1][i].wu = dp[1][i - 1].wu + a[1][i].wu;
    ot[i][1].er = ot[i][1].wu = 0;
    ot[1][i].er = ot[1][i].wu = 1;
  }
  for (int i = 2; i <= n; i++) {
    for (int j = 2; j <= n; j++) {
      if (dp[i - 1][j].er < dp[i][j - 1].er) {
        dp[i][j].er = dp[i - 1][j].er + a[i][j].er;
        ot[i][j].er = 0;
      } else {
        dp[i][j].er = dp[i][j - 1].er + a[i][j].er;
        ot[i][j].er = 1;
      }
      if (dp[i - 1][j].wu < dp[i][j - 1].wu) {
        dp[i][j].wu = dp[i - 1][j].wu + a[i][j].wu;
        ot[i][j].wu = 0;
      } else {
        dp[i][j].wu = dp[i][j - 1].wu + a[i][j].wu;
        ot[i][j].wu = 1;
      }
    }
  }
  long long ans = min(dp[n][n].er, dp[n][n].wu);
  if (yes) ans = min(ans, (long long)(1));
  printf("%lld\n", ans);
  if (yes && ans == 1) {
    int x = 1, y = 1;
    for (int i = 1; i < px; i++) cout << 'D';
    for (int i = 1; i < py; i++) cout << 'R';
    for (int i = px + 1; i <= n; i++) cout << 'D';
    for (int i = py + 1; i <= n; i++) cout << 'R';
  } else {
    if (dp[n][n].er < dp[n][n].wu)
      prt(2, n, n);
    else
      prt(5, n, n);
  }
  return 0;
}
