#include <bits/stdc++.h>
using namespace std;

struct Node{
	int s[3],val,tag;
}t[1<<21];

int nds=0;

void pd(int now){
	if(t[now].tag){
		if(t[now].s[0]){
			t[t[now].s[0]].tag^=1;
			t[t[now].s[1]].tag^=1;
			t[t[now].s[2]].tag^=1;
		}
		swap(t[now].s[1],t[now].s[2]);
		t[now].tag=0;
	}
}

void ops(){
	t[1].tag^=1;
}

void opr(int now=1){
	pd(now);
	if(!t[now].s[0]){
		return;
	}
	swap(t[now].s[1],t[now].s[2]);
	swap(t[now].s[0],t[now].s[1]);
	opr(t[now].s[0]);
}

int n;

int init(int nr=n,int ch=1,int val=0){
	int now=++nds;
	if(nr==1){
		t[now].val=val;
		return now;
	}
	t[now].s[0]=init(nr/3,ch*3,val);
	t[now].s[1]=init(nr/3,ch*3,val+ch);
	t[now].s[2]=init(nr/3,ch*3,val+ch*2);
	return now;
}

int get(int to,int nr=n,int now=1){
	pd(now);
	if(nr==1){
		return t[now].val;
	}
	return get(to/3,nr/3,t[now].s[to%3]);
}

char T[200005];
int p[1<<20];

int main(){
	int N;
	scanf("%d",&N);
	n=1;
	for(int i=0;i<N;i++){
		n*=3;
	}
	init();
	scanf("%s",T);
	for(int f=0;T[f];f++){
		if(T[f]=='S'){
			ops();
		}else{
			opr();
		}
	}
	for(int i=0;i<n;i++){
		p[get(i)]=i;
	}
	for(int i=0;i<n;i++){
		printf("%d%c",p[i]," \n"[i==n-1]);
	}
	return 0;
}