#include <iostream>
#include <vector>
#include <string>
using namespace std;
/*
思路: 将显示的4个歌放到一个数组(show)中;起始时,show中显示前四首歌(1,2,3,4);
先判断需不需要翻页,
翻页情况1: 从第一个翻到最后一个,光标指向最后一个
显示的数据 (n-3,n-2,n-1,n)
翻页情况2: 从最后一个翻到第一个,光标指向第一个
显示的数据 (1,2,3,4)
翻页情况3: 正常翻页,U 向上翻,所有元素--; D 向下翻 所有元素++;
如果不需要翻页,直接该光标位置
假设数组(show)的角标为光标, 光标指向最后一个,也就是指向show中的最后一个,即flag = 3,
光标指向第一个,也就是指向show中的第一个,即flag = 0,
U 向上翻,flag--; D 向下翻, flag++;
*/
class Solution{
vector<int> mp;
int flag = 0;
public:
void UpAndDown(const int n,const string cmd)
{
int size = cmd.size();
if (n <= 4) {
for (int i = 1; i <= n; i++) {
mp.push_back(i);
}
for (int i = 0; i < n; i++)
cout << mp[i] << ' ';
cout << endl;
for(int i = 0;i < size;i++)
{
if (cmd[i] == 'U') {
if (flag == 0) {
flag = n - 1;
}
else {
flag--;
}
}
else {
if (flag == n - 1) {
flag = 0;
}
else {
flag++;
}
}
}
cout << mp[flag] << endl;
}
else {
for (int i = 1; i <= 4; i++) {
mp.push_back(i);
}
for (int i = 0; i < size; i++)
{
if (cmd[i] == 'U') {
if (mp[0] == 1 && flag == 0) { //翻页情况1
mp.clear();
mp.push_back(n - 3);
mp.push_back(n - 2);
mp.push_back(n - 1);
mp.push_back(n);
flag = 3;
}
else if (flag == 0 && mp[0] != 1) { //正常翻页
mp[0]--;
mp[1]--;
mp[2]--;
mp[3]--;
}
else { //不需要翻页
flag--;
}
}
else {
if (mp[3] == n && flag == 3) { //翻页情况2
mp.clear();
mp.push_back(1);
mp.push_back(2);
mp.push_back(3);
mp.push_back(4);
flag = 0;
}
else if (flag == 3 && mp[3] != n) { //正常翻页
mp[0]++;
mp[1]++;
mp[2]++;
mp[3]++;
}
else { //不翻页
flag++;
}
}
}
cout << mp[0] << ' ' << mp[1] << ' ' << mp[2] << ' ' << mp[3] << endl;
cout << mp[flag] << endl;
}
}
};
int main()
{
int n;
string cmd;
while (cin >> n >> cmd)
{
Solution A;
A.UpAndDown(n, cmd);
}
return 0;
}