#include <cstring>
#include <iostream>
using namespace std;
const int maxn = 1050,inf = (1<<30);
int n,a[maxn][maxn],f[maxn][maxn],fore[maxn][maxn][2];
int ans = inf;
void dfs(int x,int y,int n2,int n5,int fx,int fy,bool flag){
if((x == n+1 && y == n) || (x == n && y == n+1)){
ans = min(ans,f[n][n]);
return;
}
if(x>n||y>n)return;
int A = a[x][y];
if(a[x][y] == 0) flag = true;
if(!flag){
while(!(A%5)){
n5++;
A/=5;
}
A = a[x][y];
while(!(A%2)){
n2++;
A/=2;
}
}
int Cnt0 = (flag?1:min(n2,n5));
if(Cnt0 >= f[x][y])return;
f[x][y] = Cnt0;
fore[x][y][0] = fx,fore[x][y][1] = fy;
dfs(x+1,y,n2,n5,x,y,flag);
dfs(x,y+1,n2,n5,x,y,flag);
}
void print(int x,int y){
if(!fore[x][y][0] || !fore[x][y][1])return;
print(fore[x][y][0],fore[x][y][1]);
cout << (fore[x][y][0] == x?"R":"D");
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
cin >> n;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=n;j++){
cin >> a[i][j];
}
}
memset(f,0x3f,sizeof f);
dfs(1,1,0,0,0,0,0);
cout << ans << endl;
print(n,n);
return 0;
}