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 <stdio.h>
#include<math.h>
#include <algorithm>
#include <stack>
using namespace std;

bool rangeCheck(int row, int col){
	if(row % 2 == 0){
		if(row >= 0 && row <= 8 && col >= 0 && col <= 3)return true;
		else{
			return false;
		}
	}else{
		if(row >= 0 && row <= 8 && col >= 0 && col <= 4)return true;
		else{
			return false;
		}
	}
}

int main(){
	int checkTable[9][5],row,col;
	char array[9][6];

	for(int i = 0; i < 9; i++){
		for(int k=0; k < 5; k++){
			checkTable[i][k] = 0;
		}
	}

	for(int i=0;i < 9; i++){
		scanf("%s",array[i]);
	}

	printf("R");
	char current = 'R';

	checkTable[0][0] = 1;

	row = 0,col = 0;

	bool FLG = true;

	while(FLG){
		switch(current){
		case 'L':
			if(rangeCheck(row,col-1)&&checkTable[row][col-1] == 0 && array[row][col-1] == '1'){
				printf("L");
				checkTable[row][col-1] = 1;
				col = col-1;
			}else if(rangeCheck(row+1,col)&&checkTable[row+1][col] == 0 && array[row+1][col] == '1'){
				printf("D");
				checkTable[row+1][col] = 4;
				current = 'D';
				row = row+1;
			}else if(rangeCheck(row-1,col)&&checkTable[row-1][col] == 0 && array[row-1][col] == '1'){
				printf("U");
				checkTable[row-1][col] = 3;
				current = 'U';
				row = row-1;
			}else{
				FLG = false;
			}
			break;
		case 'R':
			if(rangeCheck(row,col+1)&&checkTable[row][col+1] == 0 && array[row][col+1] == '1'){
				printf("R");
				checkTable[row][col+1] = 2;
				col = col+1;
			}else if(rangeCheck(row-1,col+1)&&checkTable[row-1][col+1] == 0 && array[row-1][col+1] == '1'){
				printf("U");
				checkTable[row-1][col+1] = 3;
				current = 'U';
				row = row-1;
				col = col+1;
			}else if(rangeCheck(row+1,col+1)&&checkTable[row+1][col+1] == 0 && array[row+1][col+1] == '1'){
				printf("D");
				checkTable[row+1][col+1] = 4;
				current = 'D';
				row = row+1;
				col = col+1;
			}else{
				FLG = false;
			}
			break;
		case 'U':
			if(rangeCheck(row-2,col)&&checkTable[row-2][col] == 0 && array[row-2][col] == '1'){
				printf("U");
				checkTable[row-2][col] = 3;
				row = row - 2;
			}else if(rangeCheck(row-1,col-1)&&checkTable[row-1][col-1] == 0 && array[row-1][col-1] == '1'){
				printf("L");
				checkTable[row-1][col-1] = 1;
				current = 'L';
				row = row-1;
				col = col-1;
			}else if(rangeCheck(row-1,col)&&checkTable[row-1][col] == 0 && array[row-1][col] == '1'){
				printf("R");
				checkTable[row-1][col] = 2;
				current = 'R';
				row = row-1;
			}else{
				FLG = false;
			}
			break;
		case 'D':
			if(rangeCheck(row+2,col)&&checkTable[row+2][col] == 0 && array[row+2][col] == '1'){
				printf("D");
				checkTable[row+2][col] = 4;
				row = row+2;
			}else if(rangeCheck(row+1,col)&&checkTable[row+1][col] == 0 && array[row+1][col] == '1'){
				printf("R");
				checkTable[row+1][col] = 2;
				current = 'R';
				row = row+1;
			}else if(rangeCheck(row+1,col-1)&&checkTable[row+1][col-1] == 0 && array[row+1][col-1] == '1'){
				printf("L");
				checkTable[row+1][col-1] = 1;
				current = 'L';
				row = row +1;
				col = col -1;
			}else{
				FLG = false;
			}
			break;
		}

	}

	FLG = true;

	while(FLG){
		switch(current){
		case 'L':
			if(rangeCheck(row,col-1)&&checkTable[row][col-1] != 1 && array[row][col-1] == '1'){
				printf("L");
				checkTable[row][col-1] = 1;
				col = col-1;
			}else if(rangeCheck(row+1,col)&&checkTable[row+1][col] != 4 && array[row+1][col] == '1'){
				printf("D");
				checkTable[row+1][col] = 4;
				current = 'D';
				row = row+1;
			}else if(rangeCheck(row-1,col)&&checkTable[row-1][col] != 3 && array[row-1][col] == '1'){
				printf("U");
				checkTable[row-1][col] = 3;
				current = 'U';
				row = row-1;
			}else{
				FLG = false;
			}
			break;
		case 'R':
			if(rangeCheck(row,col+1)&&checkTable[row][col+1] != 2 && array[row][col+1] == '1'){
				printf("R");
				checkTable[row][col+1] = 2;
				col = col+1;
			}else if(rangeCheck(row-1,col+1)&&checkTable[row-1][col+1] != 3 && array[row-1][col+1] == '1'){
				printf("U");
				checkTable[row-1][col+1] = 3;
				current = 'U';
				row = row-1;
				col = col+1;
			}else if(rangeCheck(row+1,col+1)&&checkTable[row+1][col+1] != 4 && array[row+1][col+1] == '1'){
				printf("D");
				checkTable[row+1][col+1] = 4;
				current = 'D';
				row = row+1;
				col = col+1;
			}else{
				FLG = false;
			}
			break;
		case 'U':
			if(rangeCheck(row-2,col)&&checkTable[row-2][col] != 3 && array[row-2][col] == '1'){
				printf("U");
				checkTable[row-2][col] = 3;
				row = row - 2;
			}else if(rangeCheck(row-1,col-1)&&checkTable[row-1][col-1] != 1 && array[row-1][col-1] == '1'){
				printf("L");
				checkTable[row-1][col-1] = 1;
				current = 'L';
				row = row-1;
				col = col-1;
			}else if(rangeCheck(row-1,col)&&checkTable[row-1][col] != 2 && array[row-1][col] == '1'){
				printf("R");
				checkTable[row-1][col] = 2;
				current = 'R';
				row = row-1;
			}else{
				FLG = false;
			}
			break;
		case 'D':
			if(rangeCheck(row+2,col)&&checkTable[row+2][col] != 4 && array[row+2][col] == '1'){
				printf("D");
				checkTable[row+2][col] = 4;
				row = row+2;
			}else if(rangeCheck(row+1,col)&&checkTable[row+1][col] != 2 && array[row+1][col] == '1'){
				printf("R");
				checkTable[row+1][col] = 2;
				current = 'R';
				row = row+1;
			}else if(rangeCheck(row+1,col-1)&&checkTable[row+1][col-1] != 1 && array[row+1][col-1] == '1'){
				printf("L");
				checkTable[row+1][col-1] = 1;
				current = 'L';
				row = row +1;
				col = col -1;
			}else{
				FLG = false;
			}
			break;
		}

	}


	printf("L\n");

    return 0;
}

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

using namespace std;

char d[10][6];

void solve(int y,int x,int way){
  if(y==0&&x==0)return;
  if(way==1){
    cout<<"R";
    if(y>0&&d[y-1][x+1]=='1')solve(y-1,x+1,2);
    else if(x<4&&d[y][x+1]=='1')solve(y,x+1,1);
    else if(y<8&&d[y+1][x+1]=='1')solve(y+1,x+1,4);
  }
  else if(way==2){
    cout<<"U";
    if(x>0&&d[y-1][x-1]=='1')solve(y-1,x-1,3);
    else if(y>1&&d[y-2][x]=='1')solve(y-2,x,2);
    else if(x<4&&d[y-1][x]=='1')solve(y-1,x,1);
  }
  else if(way==3){
    cout<<"L";
    if(y<8&&d[y+1][x]=='1')solve(y+1,x,4);
    else if(x>0&&d[y][x-1]=='1')solve(y,x-1,3);
    else if(y>0&&d[y-1][x]=='1')solve(y-1,x,2);
  }
  else if(way==4){
    cout<<"D";
    if(x<4&&d[y+1][x]=='1')solve(y+1,x,1);
    else if(y<7&&d[y+2][x]=='1')solve(y+2,x,4);
    else if(x>0&&d[y+1][x-1]=='1')solve(y+1,x-1,3);
  }
  //cout<<"error"<<endl;
}

int main(void){
  for(int i=0;i<9;i++){
    cin>>d[i];
  }
  cout<<"R";
  solve(0,1,1);
  cout<<endl;
  return 0;
}