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

typedef long long ll;

int n;
int N;

string red(string s){
	string ret="";
	for(int i=0;i<s.size();i++){
		ret+=s[i];
		if(ret.size()>=2&&ret[ret.size()-1]=='S'&&ret[ret.size()-2]=='S'){
			ret.pop_back();
			ret.pop_back();
		}
	}
	return ret;
}

int ret[1<<24];
void solve(string s,int d,int mask){
	//cerr<<s<<" "<<d<<" "<<mask<<endl;
	int p[3]={0,1,2};
	string t[3];
	for(int i=0;i<s.size();i++){
		if(s[i]=='S'){
			for(int j=0;j<3;j++){
				if(p[j]!=0)p[j]=3-p[j];
				t[j]+='S';
			}
		}
		else {
			for(int j=0;j<3;j++){
				p[j]++;
				if(p[j]==3){
					p[j]=0;
					t[j]+='R';
				}
			}
		}
		/*for(int j=0;j<3;j++){
			cerr<<p[j]<<" ";
		}cerr<<endl;*/
	}
	int m[3];
	m[0]=mask-(1<<(2*d+1))-(1<<(2*d));
	m[1]=mask-(1<<(2*d+1));
	m[2]=mask-(1<<(2*d));
	for(int i=0;i<3;i++){
		ret[m[i]]=p[i];
		//cerr<<m[i]<<" "<<p[i]<<endl;
		if(d+1<n)solve(red(t[i]),d+1,m[i]);
	}
}

int main(){
	string t;
	cin>>n>>t;
	N=1;
	for(int i=0;i<n;i++)N*=3;
	
	int cnt=0;
	for(int i=0;i<t.size();i++){
		if(t[i]=='S')cnt++;
	}
	if(cnt&1)t+='S';
	t=red(t);
	memset(ret,-1,sizeof ret);
	solve(t,0,(1<<(2*n))-1);
	
	bool addS=cnt&1;
	
	vector<int> p;
	for(int i=0;i<(1<<(2*n));i++){
		bool ok=true;
		for(int j=0;j<n;j++){
			if(((i>>(2*j))&3)==3)ok=false;
		}
		if(!ok)continue;
		int cnt=0;
		int tt=N/3;
		int mask=i;
		for(int j=n-1;j>=0;j--){
			int x=0;
			if(ret[mask]==-1)x=(i>>(2*j))&3;
			else x=ret[mask];
			if(addS&&x!=0)x=3-x;
			cnt+=tt*x;
			/*if(ret[mask]==-1)cnt+=tt*((i>>(2*j))&3);
			else {
				cnt+=tt*ret[mask];
			}*/
			mask|=3<<(2*j);
			tt/=3;
		}
		p.push_back(cnt);
	}
	for(int i=0;i<p.size();i++){
		cout<<p[i]<<" ";
	}
	cout<<endl;
}

