#include<iostream>#include<cstdio>#include<cstdlib>#include<vector>#define Maxn 2200#include<cstring>#define INF 0x3f3f3f3fusing namespace std;struct Point{ int x,y;}pp[Maxn];struct Inf{ int x,y; int dd;}ans[Maxn];vector<int>myv[Maxn][5];bool vis[Maxn];int n,dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}},cnt;bool hav[5];void dfs(int cur,int dd){ for(int k=1;k<=4;k++) { for(int p=0;p<myv[cur][k].size();p++) { if(vis[myv[cur][k][p]]) continue; vis[myv[cur][k][p]]=true; dfs(myv[cur][k][p],k); } } ++cnt; ans[cnt].x=pp[cur].x; ans[cnt].y=pp[cur].y; ans[cnt].dd=dd; }int main(){ while(~scanf("%d",&n)) { for(int i=1;i<=n;i++) { scanf("%d%d",&pp[i].x,&pp[i].y); for(int j=1;j<=4;j++) myv[i][j].clear(); } for(int i=1;i<=n;i++) { int Max[5]; int temp[5]; for(int i=1;i<=4;i++) Max[i]=INF; for(int j=1;j<=n;j++) { if(i==j) continue; if(pp[j].x==pp[i].x) { if(pp[j].y>pp[i].y&&pp[j].y<Max[1]) { Max[1]=pp[j].y; temp[1]=j; } if(pp[j].y<pp[i].y&&pp[j].y<Max[3]) { Max[3]=pp[j].y; temp[3]=j; } } if(pp[j].y==pp[i].y) { if(pp[j].x>pp[i].x&&pp[j].x<Max[2]) { Max[2]=pp[j].x; temp[2]=j; } if(pp[j].x<pp[i].x&&pp[j].x<Max[4]) { Max[4]=pp[j].x; temp[4]=j; } } } for(int k=1;k<=4;k++) { if(Max[k]!=INF) myv[i][k].push_back(temp[k]); } } memset(vis,0,sizeof(vis)); int an=0; cnt=0; for(int i=1;i<=n;i++) { if(vis[i]) continue; an++; vis[i]=true; for(int k=1;k<=4;k++) { for(int p=0;p<myv[i][k].size();p++) { if(!vis[myv[i][k][p]]) { vis[myv[i][k][p]]=true; dfs(myv[i][k][p],k); } } } } printf("%dn",an); for(int i=1;i<=cnt;i++) { printf("(%d, %d) ",ans[i].x,ans[i].y); switch(ans[i].dd) { case 1:printf("DOWNn");break; case 2:printf("LEFTn");break; case 3:printf("UPn");break; case 4:printf("RIGHTn");break; } } } return 0;}