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>

using namespace std;


int main(){

	while(1){
	char yoko[10][10];
	char tate[10][10];
	
	for(int i = 0; i < 5; i++){
		for(int j = 0; j < 4; j++){
			cin>>yoko[i][j];
		}
		if(i!=4){
			for(int j = 0; j < 5; j++){
				cin>>tate[i][j];
			}
		}
	}
	if(cin.eof())
		break;


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

		}
		return 0;
}

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

using namespace std;


int main(){

	//while(1){
		char yoko[10][10];
		char tate[10][10];
	//	if(cin.eof())
	//		break;

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

C++: #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <utility>
#include <cctype>
#include <numeric>
#include <cassert>
using namespace std;

#define rep(i,n) for(int (i)=0; (i)<(int)(n); ++(i))
#define foreach(c,i) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)

char m[10][10];

bool end(int x, int y) {
  return (x == 1 && y == 1) || (x == 0 && y == 1) ;
}

void check(int x, int y, int d) {
  printf("x,y = %d,%d : %d\n", x, y, d);
  assert(false);
}

int main() {
  memset(m, 0, sizeof m);
  string ans = "R";
  rep(i,9) scanf(" %s", m[i]);
  rep(i,9) {
    rep(j,5) {
      m[i][j] = (m[i][j] == '1') ? 1 : 0 ;
    }
  }
  // rep(i,9) {
  //   rep(j,5) printf("%2d", m[i][j]); puts("");
  // }

  int x = 1, y = 0, d = 1;
  do {
    // printf("(%d,%d) : %d : %s\n", x, y, d, ans.c_str());
    switch (d) {
      case 0: {
        // up
        if (m[2*(y-2)+1][x]) {
          ans += 'U';
          --y;
        } else if (m[2*(y-1)][x]) {
          ans += 'R';
          d = 1;
          ++x; --y;
        } else if (m[2*(y-1)][x-1]) {
          ans += 'L';
          d = 3;
        } else {check(x,y,d);}
        break;
      }
      case 1: {
        // right
        if (m[2*y][x]) {
          ans += 'R';
          ++x;
        } else if (m[2*(y-1)+1][x]) {
          ans += 'U';
          d = 0;  
        } else if (m[2*y+1][x]) {
          ans += 'D';
          d = 2;
          ++x; ++y;
        } else {check(x,y,d);}
        break;        
      }
      case 2: {
        // down
        if (m[2*y+1][x-1]) {
          ans += 'D';
          ++y;
        } else if (m[2*y][x-1]) {
          ans += 'R';
          d = 1;
        } else if (m[2*y][x-2]) {
          ans += 'L';
          d = 3;
          --x; ++y;
        } else {check(x,y,d);}
        break;
      }
      case 3: {
        // left
        if (m[2*(y-1)][x-2]) {
          ans += 'L';
          --x;
        } else if (m[2*(y-2)+1][x-1]) {
          ans += 'U';
          d = 0;
          --x; --y;
        } else if (m[2*(y-1)+1][x-1]) {
          ans += 'D';
          d = 2;
        } else {check(x,y,d);}
        break;        
      }
    }
  } while (!end(x,y) && ans.size() < 40);
  printf("%s\n", ans.c_str());
  return 0;
}