Go: package main

import (
	"bufio"
	"os"
	"strings"
	"strconv"
	"fmt"
)

var points [5][5][4]bool

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	for i := 0; i < 9; i++ {
		y := i/2
		if i%2 == 0 {
			scanner.Scan()
			info := strings.Split(scanner.Text(), "")
			for k := range info {
				e, _ := strconv.Atoi(info[k])
				if e != 0 {
					points[y][k][1], points[y][k+1][3] = true, true
				}
			}
		} else {
			scanner.Scan()
			info := strings.Split(scanner.Text(), "")
			for k := range info {
				e, _ := strconv.Atoi(info[k])
				if e != 0 {
					points[y][k][2], points[y+1][k][0] = true, true
				}
			}
		}
	}
	x := 1
	y := 0
	dir := 1
	dx := []int{0, 1, 0, -1}
	dy := []int{-1, 0, 1, 0}
	ds := "URDL"
	fmt.Printf("%s", string(ds[dir]))
	for !(x == 0 && y == 0) {
		if points[y][x][(dir+3)%4] {
			dir = (dir+3)%4
		} else if points[y][x][dir] {

		} else if points[y][x][(dir+1)%4] {
			dir = (dir+1)%4
		} else {
			dir = (dir+2)%4
		}
		x += dx[dir]
		y += dy[dir]
		fmt.Printf("%s", string(ds[dir]))
	}
	fmt.Println()
}

C++: #include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <string>

using namespace std;


int main(){

	int yoko[10][10];
	int tate[10][10];
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < 4; j++){
				char c;
				cin>>c;
				yoko[i][j]=c-'0';
		}
		if(i!=4){
			for(int j = 0; j < 5; j++){
				char c;
				cin>>c;
				tate[i][j]=c-'0';
			}
		}
	}
	int cx=0;
	int cy=0;

	// 0:E,1:º,2:¶,3:ã
	int angle=0;
	while(1){
		int nx=cx;
		int ny=cy;
		if(angle==0){
			nx=cx+1;
			ny=cy;
			// Çª éÈç
			if(nx>=0&&ny>=0&&ny<5&&nx<5&&yoko[cy][cx]){
				cy=ny;
				cx=nx;
				cout<<'R';
			}
			// È¢ÈçAü«ðÏX
			else{
				if(cy!=0&&tate[cy-1][cx]){
					angle=3;
				}
				else if(tate[cy][cx]){
					angle=1;
				}
				else{
					angle=2;
				}
			}
		}
		else if(angle==1){
			nx=cx;
			ny=cy+1;
			// Çª éÈç
			if(nx>=0&&ny>=0&&ny<5&&nx<5&&tate[cy][cx]){
				cy=ny;
				cx=nx;
				cout<<'D';
			}
			// È¢ÈçAü«ðÏX
			else{
				// EÌÇðDæ
				if(cx!=4&&yoko[cy][cx]){
					angle=0;
				}
				// ¶
				else if(cx!=0&&yoko[cy][cx-1]){
					angle=2;
				}
				// ÍñÄñ
				else{
					angle=3;
				}
			}
		}
		// ¶
		else if(angle==2){
			nx=cx-1;
			ny=cy;
			// Çª éÈç
			if(nx>=0&&ny>=0&&ny<5&&nx<5&&yoko[cy][cx-1]){
				cy=ny;
				cx=nx;
				cout<<'L';
			}
			// È¢ÈçAü«ðÏX
			else{
				// ºÌÇªDæ
				if(cy!=4&&tate[cy][cx]){
					angle=1;
				}
				// ã
				else if(cy!=0&&tate[cy-1][cx]){
					angle=3;
				}
				// ÍñÄñ
				else{
					angle=0;
				}
			}
		}
		// ã
		else if(angle==3){
			nx=cx;
			ny=cy-1;
			// Çª éÈç
			if(nx>=0&&ny>=0&&ny<5&&nx<5&&tate[cy-1][cx]){
				cy=ny;
				cx=nx;
				cout<<'U';
			}
			// È¢ÈçAü«ðÏX
			else{
				// ¶ÌÇðDæ
				if(cx!=0&&yoko[cy][cx-1]){
					angle=2;
				}
				// E
				else if(cx!=4&&yoko[cy][cx]){
					angle=0;
				}
				// ÍñÄñ
				else{
					angle=1;
				}
			}		
	   }
		if(cx==0&&cy==0)
			break;
	}
	cout<<endl;
	
	return 0;
}


//
//int main(){
//
//	//while(1){
//		char yoko[10][10];
//		char tate[10][10];
//		//memset(yoko,0,sizeof(yoko));
//		//memset(tate,0,sizeof(tate));
//		for(int i = 0; i < 5; i++){
//			for(int j = 0; j < 4; j++){
//				char c;
//				cin>>c;
//				yoko[i][j]=c;
//			}
//			if(i!=4){
//				for(int j = 0; j < 5; j++){
//					char c;
//					cin>>c;
//					tate[i][j]=c;
//				}
//			}
//		}
//		// 0,1,2,3ÅEAºA¶Aã
//		int angle=0;
//		int px,py;
//		px=py=0;
//		string str="";
//		while(1){
//			if(angle==0){
//				if(px!=4&&yoko[py][px]=='1'){
//					str+='R';
//					px++;
//				}
//				else{
//					// ãÖ
//					if(py!=0&&tate[py-1][px]=='1'){
//						py--;
//						angle=3;
//						str+='U';
//					}
//					// ºÉÇª êÎAºÖ
//					else if(py!=4&&tate[py][px]=='1'){
//						py++;
//						angle=1;
//						str+='D';
//					}
//					else{
//						px--;
//						angle=2;
//						str+='L';
//					}
//				}
//			}
//			// º
//			else if(angle==1){
//				if(py!=4&&tate[py][px]=='1'){
//					str+='D';
//					py++;
//				}
//				else{
//					// ºÉÇª³¯êÎA½]
//					if(px!=4&&yoko[py][px]=='1'){
//						str+='R';
//						angle=0;
//						px++;
//					}
//					else if(px!=0&&yoko[py][px-1]=='1'){
//						str+='L';
//						angle=2;
//						px--;
//					}
//					else{
//						py--;
//						angle=3;
//						str+='U';
//					}
//				}
//			}
//			// ¶
//			else if(angle==2){
//				if(px!=0&&yoko[py][px-1]=='1'){
//					str+='L';
//					px--;
//				}
//				else{
//					// ºÉÇª êÎAºÖ
//					if(py!=4&&tate[py][px]=='1'){
//						py++;
//						angle=1;
//						str+='D';
//					}
//					// ãÖ
//					else if(py!=0&&tate[py-1][px]=='1'){
//						py--;
//						angle=3;
//						str+='U';
//					}
//					else{
//						px++;
//						angle=0;
//						str+='R';
//					}
//				}
//			}
//			// ã
//			else if(angle==3){
//				if(py!=0&&tate[py-1][px]=='1'){
//					str+='U';
//					py--;
//				}
//				else{
//					// ºÉÇª³¯êÎA½]
//					if(px!=0&&yoko[py][px-1]=='1'){
//						str+='L';
//						angle=2;
//						px--;
//					}
//					else if(px!=4&&yoko[py][px]=='1'){
//						str+='R';
//						angle=0;
//						px++;
//					}
//					else{
//						py++;
//						angle=1;
//						str+='D';
//					}
//				}
//			}
//			if(px==0&&py==0){
//				break;
//			}
//}
//
////cout<<str<<endl;
////break;
//
////}
//return 0;
//}

C++: #include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;

#define REP(i,n) for(int i = 0; i < (int)n; ++i)
#define DEBUG(x) cerr << #x << " = " << x << endl

int main() {
    static bool wall[6][6][4];
    const int dx[4] = { 1, 0, -1, 0 };
    const int dy[4] = { 0, 1, 0, -1 };
    REP(i,6) REP(j,6) REP(k,4) {
        int ni = i + dy[k];
        int nj = j + dx[k];
        if(0 <= ni && ni < 6 && 0 <= nj && nj < 6) {
            wall[i][j][k] = 0;
        }
        else {
            wall[i][j][k] = 1;
        }
    }
    
    string s;
    for(int i = 0; i < 4; i++) {
        getline(cin, s);
        for(int j = 0; j < 4; j++) {
            wall[i][j + 1][1] = (s[j] == '1');
            wall[i + 1][j + 1][3] = (s[j] == '1');
        }
        getline(cin, s);
        for(int j = 0; j < 5; j++) {
            wall[i + 1][j][0] = (s[j] == '1');
            wall[i + 1][j + 1][2] = (s[j] == '1');
        }
    }
    getline(cin, s);
    for(int j = 0; j < 4; j++) {
        wall[4][j + 1][1] = (s[j] == '1');
        wall[5][j + 1][3] = (s[j] == '1');
    }

    string icon = "RDLU";
#if 0
    REP(i,6) REP(j,6) {
        cerr << "(" << i << "," << j << ")";
        REP(k,4) {
            if(wall[i][j][k] == false) cerr << icon[k];
        }
        cerr << endl;
    }
#endif

    int X = 1, Y = 0, dir = 0;
    string ans = "R";
    do {
#if 0
        cerr << "X = " << X << ", Y = " << Y << ", dir = " << dir << endl;
#endif
        if(wall[Y][X][dir] == 0) {
            Y += dy[dir];
            X += dx[dir];

            if(wall[Y][X][(dir + 1) % 4] == 0) {
                dir = (dir + 1) % 4;
                X += dx[dir];
                Y += dy[dir];
                if(wall[Y][X][(dir + 1) % 4] == 0) {
                    dir = (dir + 1) % 4;
                    X += dx[dir];
                    Y += dy[dir];
                }
                else {
                    ans.push_back(icon[dir]);
                }
            }
            else {
                ans.push_back(icon[dir]);
            }
        }
        else {
            dir = (dir - 1 + 4) % 4;
            ans.push_back(icon[dir]);
        }
    } while(!((X == 1 && Y == 0)));

    cout << ans << endl;
}