#include <bits/stdc++.h>
using namespace std;
const int MAXV = 6.1e5;
const int MAXN = 13;
int p3[MAXN];
int n;
struct node {
union {
int idx;
node* c[3];
};
bool lazy;
};
node node_pool[MAXV * 3];
int node_idx = 0;
node* init(int cur, int pos) {
node* v = &(node_pool[node_idx++]);
if (cur == n) {
// leaf
v->idx = pos;
} else {
for (int x = 0; x < 3; x++) {
v->c[x] = init(cur+1, pos + p3[cur] * x);
}
}
return v;
}
void apply(node* v) {
assert(v);
v->lazy = !v->lazy;
swap(v->c[1], v->c[2]);
}
void propagate(node* v) {
if (!v->lazy) return;
v->lazy = false;
for (int x = 0; x < 3; x++) apply(v->c[x]);
}
void upd(node* v, int cur) {
if (cur == n) {
// leaf
} else {
propagate(v);
swap(v->c[1], v->c[2]);
swap(v->c[0], v->c[1]);
upd(v->c[0], cur+1);
}
}
int ans[MAXV];
void dfs(node* v, int cur, int pos) {
if (cur == n) {
ans[v->idx] = pos;
} else {
propagate(v);
for (int x = 0; x < 3; x++) dfs(v->c[x], cur+1, pos + x * p3[cur]);
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0);
string t;
cin >> n >> t;
p3[0] = 1;
for (int i = 1; i <= n; i++) p3[i] = p3[i-1] * 3;
node* tr = init(0, 0);
for (char op : t) {
if (op == 'R') {
upd(tr, 0);
} else if (op == 'S') {
apply(tr);
} else assert(false);
}
dfs(tr, 0, 0);
for (int i = 0; i < p3[n]; i++) {
cout << ans[i] << " \n"[i+1==p3[n]];
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYViA9IDYuMWU1Owpjb25zdCBpbnQgTUFYTiA9IDEzOwppbnQgcDNbTUFYTl07CmludCBuOwoKc3RydWN0IG5vZGUgewoJdW5pb24gewoJCWludCBpZHg7CgkJbm9kZSogY1szXTsKCX07Cglib29sIGxhenk7Cn07Cm5vZGUgbm9kZV9wb29sW01BWFYgKiAzXTsKaW50IG5vZGVfaWR4ID0gMDsKCm5vZGUqIGluaXQoaW50IGN1ciwgaW50IHBvcykgewoJbm9kZSogdiA9ICYobm9kZV9wb29sW25vZGVfaWR4KytdKTsKCWlmIChjdXIgPT0gbikgewoJCS8vIGxlYWYKCQl2LT5pZHggPSBwb3M7Cgl9IGVsc2UgewoJCWZvciAoaW50IHggPSAwOyB4IDwgMzsgeCsrKSB7CgkJCXYtPmNbeF0gPSBpbml0KGN1cisxLCBwb3MgKyBwM1tjdXJdICogeCk7CgkJfQoJfQoJcmV0dXJuIHY7Cn0KCnZvaWQgYXBwbHkobm9kZSogdikgewoJYXNzZXJ0KHYpOwoJdi0+bGF6eSA9ICF2LT5sYXp5OwoJc3dhcCh2LT5jWzFdLCB2LT5jWzJdKTsKfQoKdm9pZCBwcm9wYWdhdGUobm9kZSogdikgewoJaWYgKCF2LT5sYXp5KSByZXR1cm47Cgl2LT5sYXp5ID0gZmFsc2U7Cglmb3IgKGludCB4ID0gMDsgeCA8IDM7IHgrKykgYXBwbHkodi0+Y1t4XSk7Cn0KCnZvaWQgdXBkKG5vZGUqIHYsIGludCBjdXIpIHsKCWlmIChjdXIgPT0gbikgewoJCS8vIGxlYWYKCX0gZWxzZSB7CgkJcHJvcGFnYXRlKHYpOwoJCXN3YXAodi0+Y1sxXSwgdi0+Y1syXSk7CgkJc3dhcCh2LT5jWzBdLCB2LT5jWzFdKTsKCQl1cGQodi0+Y1swXSwgY3VyKzEpOwoJfQp9CgppbnQgYW5zW01BWFZdOwoKdm9pZCBkZnMobm9kZSogdiwgaW50IGN1ciwgaW50IHBvcykgewoJaWYgKGN1ciA9PSBuKSB7CgkJYW5zW3YtPmlkeF0gPSBwb3M7Cgl9IGVsc2UgewoJCXByb3BhZ2F0ZSh2KTsKCQlmb3IgKGludCB4ID0gMDsgeCA8IDM7IHgrKykgZGZzKHYtPmNbeF0sIGN1cisxLCBwb3MgKyB4ICogcDNbY3VyXSk7Cgl9Cn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCk7CglzdHJpbmcgdDsKCWNpbiA+PiBuID4+IHQ7CglwM1swXSA9IDE7Cglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHAzW2ldID0gcDNbaS0xXSAqIDM7Cglub2RlKiB0ciA9IGluaXQoMCwgMCk7Cglmb3IgKGNoYXIgb3AgOiB0KSB7CgkJaWYgKG9wID09ICdSJykgewoJCQl1cGQodHIsIDApOwoJCX0gZWxzZSBpZiAob3AgPT0gJ1MnKSB7CgkJCWFwcGx5KHRyKTsKCQl9IGVsc2UgYXNzZXJ0KGZhbHNlKTsKCX0KCWRmcyh0ciwgMCwgMCk7Cglmb3IgKGludCBpID0gMDsgaSA8IHAzW25dOyBpKyspIHsKCQljb3V0IDw8IGFuc1tpXSA8PCAiIFxuIltpKzE9PXAzW25dXTsKCX0KfQo=