#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M = 1e6 + 10;
char s[M];
int trie[M][3], vis[M], cnt[13], a[12], tag[M], ans[M], tot, n;
void insert(int a[], int rt, int id){
    for(int i = 0; i < n; i++){
        int x = a[i];
        if(!trie[rt][x]) trie[rt][x] = ++tot;
        rt = trie[rt][x];
    }
    vis[rt] = id;
}
void calc(int rt) {
    for(int i = 0; i < n; i++) {
        if(tag[rt]) {
            swap(trie[rt][1], trie[rt][2]);
            tag[rt] ^= 1; tag[trie[rt][0]] ^= 1; tag[trie[rt][1]] ^= 1; tag[trie[rt][2]] ^= 1;
        }
        int temp = trie[rt][2];
        trie[rt][2] = trie[rt][1];
        trie[rt][1] = trie[rt][0];
        trie[rt][0] = temp;
        rt = trie[rt][0];
    }
}
void print(int rt, int res, int h) {
    if(tag[rt]) {
        swap(trie[rt][1], trie[rt][2]);
        tag[rt] ^= 1; tag[trie[rt][0]] ^= 1; tag[trie[rt][1]] ^= 1; tag[trie[rt][2]] ^= 1;
    }
    for(int i = 0; i < 3; i++) {
        if(trie[rt][i]) print(trie[rt][i], res + i * cnt[h], h + 1);
        else {
            ans[vis[rt]] = res;
            return;
        }
    }
}
int main(){
    scanf("%d%s", &n, s);
    int len = strlen(s), rt = 0;
    cnt[0] = 1;
    for(int i = 1; i <= n; i++) cnt[i] = cnt[i - 1] * 3;
    for(int i = 0; i < cnt[n]; i++) {
        memset(a, 0, sizeof(a));
        for(int j = n - 1; j >= 0; j--) {
            a[j] = (i % cnt[j + 1]) / cnt[j];
        }
        insert(a, rt, i);
    }
    for(int i = 0; i < len; i++) {
        if(s[i] == 'S') tag[0] ^= 1;
        else calc(rt);
    }
    print(rt, 0, 0);
    for(int i = 0; i < cnt[n]; i++) printf("%d%c", ans[i], i == cnt[n] - 1 ? '\n' : ' ');
    return 0;
}
