#include<bits/stdc++.h>
using namespace std;
struct hor;
struct ver
{
	hor* left=nullptr;
	hor* right=nullptr;
	void suan();
	void wake();
};
int n,m;
int T=0;
int cnt[300010][4]={};
vector<ver*> wa[300010][4];
struct hor
{
	int l,r,h,t,ch;
	ver* left=nullptr;
	ver* right=nullptr;
	bool A()
	{
		if(left==nullptr) return 0;
		return left->left->hh()>hh();
	}
	bool B()
	{
		if(right==nullptr) return 0;
		return right->right->hh()>hh();
	}
	void ff()
	{
		ch=A()|(B()<<1);
	}
	int hh()
	{
		return h+cnt[T][ch]-cnt[t][ch];
	}
};
void ver::suan()
{
	if(left==nullptr||right==nullptr) return;
	int tmp=abs(left->hh()-right->hh());
	int ch=(left->ch)^(right->ch);
	if(tmp!=0&&ch!=0)
	{
		int c=cnt[T][ch]+tmp;
		if(c<=m) wa[c][ch].push_back(this);
	}
}
void ver::wake()
{
	if(left==nullptr||right==nullptr) return;
	int h=left->hh();
	if(right->hh()!=h) return;
	hor* mid=left;
	mid->l=left->l;
	mid->r=right->r;
	mid->h=h;
	mid->t=T;
	mid->left=left->left;
	mid->right=right->right;
	if(mid->left!=nullptr) mid->left->right=mid;
	if(mid->right!=nullptr) mid->right->left=mid;
	mid->ff();
	if(mid->left!=nullptr) mid->left->suan();
	if(mid->right!=nullptr) mid->right->suan();
	left=nullptr;
	right=nullptr;
}
hor* init(int n)
{
	hor* first=nullptr;
	hor* pr=nullptr;
	int h;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&h);
		if(pr!=nullptr&&pr->h==h)
		{
			pr->r=i;
			continue;
		}
		T=0;
		hor* mid=new hor();
		mid->l=i;
		mid->r=i;
		mid->h=h;
		mid->t=0;
		if(pr!=nullptr)
		{
			ver* v=new ver();
			v->left=pr;
			v->right=mid;
			mid->left=v;
			pr->right=v;
			pr->ff();
		}
		else
		{
			first=mid;
		}
		pr=mid;
	}
	pr->ff();
	for(hor* i=first;i->right!=nullptr;i=i->right->right)
	{
		i->right->suan();
	}
	return first;
}
void print(hor* first)
{
	for(hor* i=first;i!=nullptr;i=i->right?i->right->right:nullptr)
	{
		for(int j=i->l;j<=i->r;j++)
		{
			if(j>1) printf(" ");
			printf("%d",i->hh());
		}
	}
	printf("\n");
}
int main()
{
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		memset(cnt,0,sizeof(cnt));
		for(int i=1;i<=m;i++)
		{
			for(int j=1;j<=3;j++) wa[i][j].clear();
		}
		hor* first=init(n);
		char c;
		for(T=1;T<=m;T++)
		{
			cin>>c;
			cnt[T][1]=cnt[T-1][1];
			cnt[T][2]=cnt[T-1][2];
			cnt[T][3]=cnt[T-1][3]+1;
			if(c=='A') 
			{
				cnt[T][1]++;
			}
			if(c=='B')
			{
				cnt[T][2]++;
			}
			for(int i=1;i<=3;i++)		
			for(int j=0;j<wa[cnt[T][i]][i].size();j++)
			{
				wa[cnt[T][i]][i][j]->wake();
			}
		}
		T--;
		print(first);
	}
	return 0;
}
