# def dfs(s, data):
# data[s] = -2
# for i in range(len(data)):
# if s == data[i]:
# dfs(i, data)
#
#
# n = int(input())
# data = list(map(int, input().split()))
# d = int(input())
# dfs(d, data)
# cnt = 0
# for i in range(n):
# if data[i] != -2 and i not in data:
# cnt += 1
# print(cnt)
# import random
# print(random.randrange(1, 10000))
# n = int(input())
# arr = list(map(int, input().split()))
#
#
# def find(start, end, value):
# cnt = 0
# for p in range(start - 1, end):
# if arr[p] == value:
# cnt += 1
# print(cnt)
#
#
# m = int(input())
# for _ in range(m):
# v = list(map(int, input().split()))
# if v[0] == 1:
# find(v[1], v[2], v[3])
# if v[0] == 2:
# arr[v[1] - 1] = v[2]
# arr = [0] * 1000000001
# tree = [0] * 4000000004
#
#
# def init(start, end, index):
# if start == end:
# tree[index] = arr[start]
# return tree[index]
# mid = (start + end) // 2
# tree[index] = init(start, mid, index * 2) + init(mid + 1, end, index * 2 + 1)
# return tree[index]
#
#
# def interval_sum(start, end, index, left, right):
# if left > end or right < start:
# return 0
# if left <= start and right >= end:
# return tree[index]
# mid = (start + end) // 2
# return interval_sum(start, mid, index * 2, left, right) + interval_sum(mid + 1, end, index * 2 + 1, left, right)
#
#
# def update(start, end, index, what, value):
# if what < start or what > end:
# return
# tree[index] += value
# if start == end:
# return
# mid = (start + end) // 2
# update(start, mid, index * 2, what, value)
# update(mid + 1, end, index * 2 + 1, what, value)
#
#
# init(0, len(arr) - 1, 1)
#
# n = int(input())
# for _ in range(n):
# v = list(map(int, input().split()))
# if v[0] == 0:
# print(interval_sum(0, len(arr)-1, 1, v[1]-1, v[2]-1))
# if v[0] == 1:
# for i in range(v[1]-1, v[2]):
# update(0, len(arr) - 1, 1, i, v[3])
dx = [1, 0, 3, 2]
dy = [2, 3, 0, 1]
k = int(input())
fold = list(reversed(input().split()))
h = int(input())
x = 1
y = 1
ans = [[h]]
for f in fold:
tmp = [[-1]*x for _ in range(y)]
for i in range(y):
for j in range(x):
if f in ['L', 'R']:
tmp[i][j] = dx[ans[i][x-j-1]]
else:
tmp[i][j] = dy[ans[y-i-1][j]]
if f == 'L':
for i in range(y):
ans[i] += tmp[i]
x *= 2
elif f == 'R':
for i in range(y):
ans[i] = tmp[i] + ans[i]
x *= 2
elif f == 'U':
ans += tmp
y *= 2
else:
ans = tmp + ans
y *= 2
for _ans in ans:
print(*_ans)
//#include <stdio.h>
//#include <stdlib.h>
//
//int main()
//{
// printf("Hello world!\n");
// return 0;
//}
//#include<stdio.h>
//int main()
//{
// int a, b;
// scanf("%d",&a);
// scanf("%d",&b);
// if(a > 0 && b > 0)
// {
// puts("1");
// }
// else if(a > 0 && b < 0)
// {
// puts("4");
// }
// else if(a < 0 && b > 0)
// {
// puts("2");
// }
// else
// {
// puts("3");
// }
//}
//#include<stdio.h>
//int main()
//{
// int a, b;
// scanf("%d %d",&a, &b);
// if(b >= 45)
// {
// printf("%d %d",a,b-45);
// }
// else
// {
// if(a == 0)
// {
// printf("23 %d",b+15);
// }
// else
// {
// printf("%d %d",a-1,b+15);
// }
// }
//}
//#include<stdio.h>
//#define max(x, y) (x) > (y) ? (x) : (y)
//int main()
//{
// int a, b, c;
// scanf("%d %d %d",&a, &b, &c);
// if(a == b && b == c)
// {
// printf("%d",10000+a*1000);
// }
// else if(a == b && b != c)
// {
// printf("%d",1000+a*100);
// }
// else if(a == c && b != c)
// {
// printf("%d",1000+a*100);
// }
// else if(b == c && a != c)
// {
// printf("%d",1000+b*100);
// }
// else
// {
// printf("%d",(max(max(a, b),c))*100);
// }
//}
//#include <iostream>
//#include <vector>
//#include <algorithm>
//#include <cstring>
//#include <cstdio>
//#include <map>
//using namespace std;
//#define MAXN 100010
//int main()
//{
// int n,i;
// cin >> n;
// vector<pair<int, char> > arr(n);
// for(i = 0; i < n; i++)
// {
// cin >> arr[i].first >> arr[i].second;
// }
// sort(arr.begin(), arr.end());
// int p = 0;
// int res = 0;
// vector<pair<int, int>> ve[2];
// for(i = 0; i < n; i++)
// {
// p += arr[i].second == 'W' ? -1 : 1;
// if (!ve[p & 1].empty() && p <= ve[p & 1].back().first)
// {
// res = max(res, arr[i].first - lower_bound(ve[p & 1].begin(), ve[p & 1].end(),make_pair(p, -1000000010))->second);
// }
// }
// cout << res;
// return 0;
//}
//#include<stdio.h>
//int arr[1000000001] = {}, tree[4000000004] = {};
//int init(int start, end, index)
//{
// if(start == end)
// {
// tree[index] = arr[start];
// return tree[index];
// }
// int mid = (int)((start+end)/2)
// tree[index] = init(start, mid, index*2)+ init(mid+1, end, index*2+1);
// return tree[index];
//}
//int interval_sum(start, end, index, left, right)
//{
// if(left > end || right < start)
// {
// return 0;
// }
// if(left <= start && right >= end)
// {
// return tree[index];
// }
// int mid = (int)((start + end) / 2);
// return interval_sum(start, mid, index*2, left, right)+interval_sum(mid + 1, end, index * 2 + 1, left, right);
//}
//int update(start, end, index, what, value)
//{
// if(what < start or what > end)
// {
// return;
// }
// tree[index] += value;
// if(start == end)
// {
// return;
// }
// int mid = (int)((start + end) / 2);
// update(start, mid, index * 2, what, value);
// update(mid + 1, end, index * 2 + 1, what, value);
//}
//
////def init(start, end, index):
//// if start == end:
//// tree[index] = arr[start]
//// return tree[index]
//// mid = (start + end) // 2
//// tree[index] = init(start, mid, index * 2) + init(mid + 1, end, index * 2 + 1)
//// return tree[index]
//
//
////def interval_sum(start, end, index, left, right):
//// if left > end or right < start:
//// return 0
//// if left <= start and right >= end:
//// return tree[index]
//// mid = (start + end) // 2
//// return interval_sum(start, mid, index * 2, left, right) + interval_sum(mid + 1, end, index * 2 + 1, left, right)
//
//
////def update(start, end, index, what, value):
//// if what < start or what > end:
//// return
//// tree[index] += value
//// if start == end:
//// return
//// mid = (start + end) // 2
//// update(start, mid, index * 2, what, value)
//// update(mid + 1, end, index * 2 + 1, what, value)
//
//int main()
//{
// init(0, len(arr) - 1, 1);
//}
//
//
//n = int(input())
//for _ in range(n):
// v = list(map(int, input().split()))
// if v[0] == 0:
// print(interval_sum(0, len(arr)-1, 1, v[1]-1, v[2]-1))
// if v[0] == 1:
// for i in range(v[1]-1, v[2]):
// update(0, len(arr) - 1, 1, i, v[3])



