#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
struct node {
int c2, c5;
string ANS;
} a[N][N];
int n;
int C2[N][N], C5[N][N];
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
int x;
cin >> x;
while (x % 2 == 0) {
a[i][j].c2++;
x /= 2;
}
while (x % 5 == 0) {
a[i][j].c5++;
x /= 5;
}
}
a[1][1].ANS = "";
for (int i = 2; i <= n; i++) {
C2[1][i] = C2[1][i - 1] + a[1][i].c2;
C5[1][i] = C5[1][i - 1] + a[1][i].c5;
a[1][i].ANS = a[1][i - 1].ANS + 'R';
}
for (int i = 2; i <= n; i++) {
C2[i][1] = C2[i - 1][1] + a[i][1].c2;
C5[i][1] = C5[i - 1][1] + a[i][1].c5;
a[i][1].ANS = a[i - 1][1].ANS + 'D';
}
for (int i = 2; i <= n; i++)
for (int j = 2; j <= n; j++) {
int x = min(C2[i - 1][j] + a[i][j].c2, C5[i - 1][j] + a[i][j].c5);
int y = min(C2[i][j - 1] + a[i][j].c2, C5[i][j - 1] + a[i][j].c5);
if (x < y) {
C2[i][j] = C2[i - 1][j] + a[i][j].c2;
C5[i][j] = C5[i - 1][j] + a[i][j].c5;
a[i][j].ANS = a[i - 1][j].ANS + 'D';
} else {
C2[i][j] = C2[i][j - 1] + a[i][j].c2;
C5[i][j] = C5[i][j - 1] + a[i][j].c5;
a[i][j].ANS = a[i][j - 1].ANS + 'R';
}
}
cout << min(C2[n][n], C5[n][n]) << endl << a[n][n].ANS << endl;
return 0;
}