#include<bits/stdc++.h>
using namespace std;
const int MAX_N=5+1e6;
int pw[25];
struct RevOp{
	int d[MAX_N];
	bool flag;
	void init(int n){
		flag=0;
		for(int i=0;i<n;++i){
			for(int j=pw[i];j<pw[i]*2;++j)
				d[j]=1;
			for(int j=pw[i]*2;j<pw[i+1];++j)
				d[j]=2;
		}
	}
	int operator[](int x){ return flag?(d[x]==0?0:3-d[x]):d[x]; }
	void add(int x){ 
		if(!flag){
			d[x]++; 
			if(d[x]>=3) d[x]-=3; 
		}else{
			d[x]--;
			if(d[x]<0) d[x]+=3;
		}
	}
	void rev(){ flag^=1; }
}d;

inline void mo(int& x){x>=3?x-=3:0;}
int gbit(int x,int i){ return x/pw[i]%3; }
int gbit2(int x,int i){
	if(gbit(x,i)!=0) return d[x%pw[i+1]];
	int y=x%pw[i];
	return 3-d[y+pw[i]]-d[y+pw[i]*2];
}
void print(int n){
	for(int x=0;x<pw[n];++x){
		int ret=0;
		for(int i=0;i<n;++i)
			ret+=gbit2(x,i)*pw[i];
		printf("%d ",ret);
	}
	puts("");
}
int main(){
	string s;
	int n,T; scanf("%d",&n); cin>>s;
	pw[0]=1; for(int i=1;i<=n;++i) pw[i]=pw[i-1]*3;
	d.init(n);
//	for(int j=0;j<pw[n];++j) printf("|%d|",d[j]);
//	print(n);
	for(int i=0;i<s.length();++i)
		if(s[i]=='S'){
			d.rev();
		}else{
			int x=0;
			for(int t=0;t<n;++t){
				d.add(x+pw[t]);
				d.add(x+pw[t]*2);
				if(gbit2(x,t)==0) x+=0;
				else if(gbit2(x+pw[t],t)==0) x+=pw[t];
				else if(gbit2(x+pw[t]*2,t)==0) x+=pw[t]*2;
			}
		}
	print(n);
	return 0;
}
	
					
			