我要裂开了
#include<bits/stdc++.h>
#ifdef ONLINE_JUDGE
static char buf[4500000],*p1=buf,*p2=buf;
#define getchar() p1==p2&&(p2=(p1=buf)+fread(buf,1,4500000,stdin),p1==p2)?EOF:*p1++
#endif
#define S std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define rep(i,l,r) for(register int i=l;i<=r;i++)
#define per(i,l,r) for(register int i=l;i>=r;i--)
#define ull unsigned long long
#define ll long long
#define lt __int128
template<typename P>inline void read(P&x){bool f=0;x=0;char c=getchar();while(!isdigit(c)) f|=c=='-',c=getchar();while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();x=f?~(x-1):x;}
template<typename P>inline void write(P x){if(x<0) putchar('-'),x=-x;if(x>9) write(x/10);putchar((x%10)^48);}
using namespace std;
const int N=2e5+5;
int h,w,n,r[N],c[N],tr[N],ans,sum[N],cnt,Max,id[N],to[N];
vector<int> v[N];pair<int,int> g[N];
inline void add(int x,int d){while(x<N) tr[x]=max(tr[x],d),x+=x&-x;}
int ask(int x,int ans=0){while(x) ans=max(ans,tr[x]),x-=x&-x;return ans;}
inline int EF(int x){
int l=1,r=w,mid,ans=1;
while(l<=r){
mid=l+r>>1;
if(ask(mid)<x) l=mid+1;
else r=mid-1,ans=mid;
}return ans;
}inline void Print(int x,int y,int l,int r){
for(int i=x+1;i<=l;i++) putchar('D');
for(int i=y+1;i<=r;i++) putchar('R');
}inline void dfs(int x){
stack<pair<int,int>> s;
while(x) s.push(g[x]),x=to[x];
int sx=1,sy=1;
while(s.size()) Print(sx,sy,s.top().first,s.top().second),sx=s.top().first,sy=s.top().second,s.pop();
Print(sx,sy,h,w);
}
int main(){
S;cin>>h>>w>>n;
rep(i,1,n) cin>>r[i]>>c[i],v[r[i]].push_back(c[i]);
rep(i,1,h)
for(int j:v[i]){
sum[++cnt]=ask(j)+1;
if(sum[cnt]!=1) to[cnt]=id[EF(sum[cnt]-1)];
if(sum[id[j]]<sum[cnt]) id[j]=cnt;
g[cnt]={i,j},add(j,sum[cnt]);
}
Max=ask(N-1);
cout<<Max<<endl;
for(int i=1;i<=cnt;i++)
if(sum[i]==Max) dfs(i),exit(0);
return 0;
}