#include <iostream>
#include <climits>
using namespace std;
struct Node{
long long int *data;
int eq_index;
};
int GetLeftChild(int &parent){
return 2*parent+1;
}
int GetRightChild(int &parent){
return 2*parent +2;
}
int GetParent(int &child){
if (child % 2 == 0)
return (child /2 ) -1;
else
return child/2;
}
void DoNode(int index, long long int *data, Node* Max, Node *Min){
Max[index].data=data;
Min[index].data=data;
Max[index].eq_index=index;
Min[index].eq_index=index;
}
void RepUpMax(Node *MAX, Node *MIN, int in){
int P=GetParent(in);
if(P>=0 && (*MAX[P].data<*MAX[in].data || (*MAX[P].data==*MAX[in].data && MAX[P].data>MAX[in].data))){
swap(MIN[MAX[P].eq_index].eq_index,MIN[MAX[in].eq_index].eq_index);
swap(MAX[P].data,MAX[in].data);
swap(MAX[P].eq_index,MAX[in].eq_index);
RepUpMax(MAX,MIN,P);
}
}
void RepUpMin(Node *MAX, Node *MIN, int in){
int P=GetParent(in);
if(*MIN[in].data!=1){
if(P>=0 && (*MIN[P].data>*MIN[in].data || (*MIN[P].data==*MIN[in].data && MIN[P].data>MIN[in].data))){
swap(MAX[MIN[P].eq_index].eq_index,MAX[MIN[in].eq_index].eq_index);
swap(MIN[P].data,MIN[in].data);
swap(MIN[P].eq_index,MIN[in].eq_index);
RepUpMin(MAX,MIN,P);
}
}
}
Node* RepDownMax(Node *MAX, Node *MIN, int in, int size){
int B=in;
int L=GetLeftChild(in);
int R=GetRightChild(in);
if(L<size && (*MAX[B].data<*MAX[L].data || (*MAX[B].data==*MAX[L].data && MAX[B].data>MAX[L].data)))
B=L;
if(R<size && (*MAX[B].data<*MAX[R].data || (*MAX[B].data==*MAX[R].data && MAX[B].data>MAX[R].data)))
B=R;
if(B!=in){
swap(MIN[MAX[B].eq_index].eq_index,MIN[MAX[in].eq_index].eq_index);
swap(MAX[B].data,MAX[in].data);
swap(MAX[B].eq_index,MAX[in].eq_index);
return RepDownMax(MAX,MIN,B,size);
}
return MAX;
}
Node* RepDownMin(Node *MAX, Node *MIN, int in, int size){
int S=in;
int L=GetLeftChild(in);
int R=GetRightChild(in);
if(L<size && (*MIN[S].data>*MIN[L].data || (*MIN[S].data==*MIN[L].data && MIN[S].data>MIN[L].data)))
S=L;
if(R<size && (*MIN[S].data>*MIN[R].data || (*MIN[S].data==*MIN[R].data && MIN[S].data>MIN[R].data)))
S=R;
if(S!=in){
swap(MAX[MIN[S].eq_index].eq_index,MAX[MIN[in].eq_index].eq_index);
swap(MIN[S].data,MIN[in].data);
swap(MIN[S].eq_index,MIN[in].eq_index);
return RepDownMax(MAX,MIN,S,size);
}
return MIN;
}
void RemoveMax(Node*MAX, Node*MIN, int &size, int index){
swap(MIN[MAX[index].eq_index].eq_index,MIN[MAX[size-1].eq_index].eq_index);
swap(MAX[index],MAX[size-1]);
RepDownMax(MAX,MIN,index,size-1);
}
void RemoveMin(Node*MAX,Node*MIN,int &size, int index){
swap(MAX[MIN[index].eq_index].eq_index,MAX[MIN[size-1].eq_index].eq_index);
swap(MIN[index],MIN[size-1]);
RepDownMin(MAX,MIN,index,size-1);
}
void CollatzMin( Node *MAX, Node *MIN, int &size){
if(*MIN[0].data%2==0){
*MIN[0].data/=2;
if(*MIN[0].data==1){
RemoveMin(MAX,MIN,size,0);
RemoveMax(MAX,MIN,size,MIN[size-1].eq_index);
size--;
}
else
RepDownMax(MAX,MIN,MIN[0].eq_index,size);
}
else{
long long int tmp=3*(*MIN[0].data)+1;
if(tmp>UINT_MAX){
*MIN[0].data=0;
RemoveMin(MAX,MIN,size,0);
RemoveMax(MAX,MIN,size,MIN[size-1].eq_index);
size--;
}
else {
*MIN[0].data=tmp;
RepUpMax(MAX,MIN,MIN[0].eq_index);
RepDownMin(MAX,MIN,0,size);
}
}
}
void CollatzMax( Node *MAX, Node *MIN, int &size){
if(*MAX[0].data%2!=0){
long long int tmp=3*(*MAX[0].data)+1;
if(tmp>UINT_MAX){
*MAX[0].data=0;
RemoveMax(MAX,MIN,size,0);
RemoveMin(MAX,MIN,size,MAX[size-1].eq_index);
size--;
}
else{
*MAX[0].data=tmp;
RepDownMin(MAX,MIN,MAX[0].eq_index,size);
}
}
else{
*MAX[0].data/=2;
if(*MAX[0].data==1){
RemoveMax(MAX,MIN,size,0);
RemoveMin(MAX,MIN,size,MAX[size-1].eq_index);
size--;
}
else
{
RepUpMin(MAX,MIN,MAX[0].eq_index);
RepDownMax(MAX,MIN,0,size);
}
}
}
int main() {
int ile,con=0,kom;
long long int tmp;
cin>>ile;
long long int *tablica=new long long int [ile];
Node *MaxHeap=new Node [ile];
Node *MinHeap=new Node [ile];
for(int i=0; i<ile; i++){
cin>>tmp;
if(tmp>UINT_MAX)
tablica[i]=0;
else if(tmp==1)
tablica[i]=1;
else if(tmp!=1){
tablica[i]=tmp;
DoNode(con,tablica+i,MaxHeap,MinHeap);
RepUpMax(MaxHeap,MinHeap,con);
RepUpMin(MaxHeap,MinHeap,con);
con++;
}
}
cin>>kom;
int ikom;
char wg;
for(int i=0; i<kom; i++){
cin>>ikom>>wg;
for(int j=0; j<ikom; j++){
if(wg=='s')
CollatzMin(MaxHeap,MinHeap,con);
else
CollatzMax(MaxHeap,MinHeap,con);
}
}
for(int i=0; i<ile; i++){
if(tablica[i]==0) cout<<"m ";
else
cout<<tablica[i]<<' ';
}
cout<<endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y2xpbWl0cz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApzdHJ1Y3QgTm9kZXsKICAgIGxvbmcgbG9uZyBpbnQgKmRhdGE7CiAgICBpbnQgZXFfaW5kZXg7Cn07CiAKaW50IEdldExlZnRDaGlsZChpbnQgJnBhcmVudCl7CiAgICByZXR1cm4gMipwYXJlbnQrMTsKfQogCmludCBHZXRSaWdodENoaWxkKGludCAmcGFyZW50KXsKICAgIHJldHVybiAyKnBhcmVudCArMjsKfQogCmludCBHZXRQYXJlbnQoaW50ICZjaGlsZCl7CiAgICBpZiAoY2hpbGQgJSAyID09IDApCiAgICAgICAgcmV0dXJuIChjaGlsZCAvMiApIC0xOwogICAgZWxzZQogICAgICAgIHJldHVybiBjaGlsZC8yOwp9CiAKdm9pZCBEb05vZGUoaW50IGluZGV4LCBsb25nIGxvbmcgaW50ICpkYXRhLCBOb2RlKiBNYXgsIE5vZGUgKk1pbil7CiAgICBNYXhbaW5kZXhdLmRhdGE9ZGF0YTsKICAgIE1pbltpbmRleF0uZGF0YT1kYXRhOwogICAgTWF4W2luZGV4XS5lcV9pbmRleD1pbmRleDsKICAgIE1pbltpbmRleF0uZXFfaW5kZXg9aW5kZXg7Cn0KIAp2b2lkIFJlcFVwTWF4KE5vZGUgKk1BWCwgTm9kZSAqTUlOLCBpbnQgaW4pewogICAgaW50IFA9R2V0UGFyZW50KGluKTsKIAogICAgaWYoUD49MCAmJiAoKk1BWFtQXS5kYXRhPCpNQVhbaW5dLmRhdGEgfHwgKCpNQVhbUF0uZGF0YT09Kk1BWFtpbl0uZGF0YSAmJiBNQVhbUF0uZGF0YT5NQVhbaW5dLmRhdGEpKSl7CiAgICAgICAgc3dhcChNSU5bTUFYW1BdLmVxX2luZGV4XS5lcV9pbmRleCxNSU5bTUFYW2luXS5lcV9pbmRleF0uZXFfaW5kZXgpOwogICAgICAgICAgICAgICAgc3dhcChNQVhbUF0uZGF0YSxNQVhbaW5dLmRhdGEpOwogICAgICAgICAgICAgICAgc3dhcChNQVhbUF0uZXFfaW5kZXgsTUFYW2luXS5lcV9pbmRleCk7CiAgICAgICAgUmVwVXBNYXgoTUFYLE1JTixQKTsKICAgIH0KfQogCnZvaWQgUmVwVXBNaW4oTm9kZSAqTUFYLCBOb2RlICpNSU4sIGludCBpbil7CiAgICBpbnQgUD1HZXRQYXJlbnQoaW4pOwogICAgaWYoKk1JTltpbl0uZGF0YSE9MSl7CiAgICAgICAgaWYoUD49MCAmJiAoKk1JTltQXS5kYXRhPipNSU5baW5dLmRhdGEgfHwgKCpNSU5bUF0uZGF0YT09Kk1JTltpbl0uZGF0YSAmJiBNSU5bUF0uZGF0YT5NSU5baW5dLmRhdGEpKSl7CiAgICAgICAgICAgIHN3YXAoTUFYW01JTltQXS5lcV9pbmRleF0uZXFfaW5kZXgsTUFYW01JTltpbl0uZXFfaW5kZXhdLmVxX2luZGV4KTsKICAgICAgICAgICAgc3dhcChNSU5bUF0uZGF0YSxNSU5baW5dLmRhdGEpOwogICAgICAgICAgICBzd2FwKE1JTltQXS5lcV9pbmRleCxNSU5baW5dLmVxX2luZGV4KTsKICAgICAgICAgICAgUmVwVXBNaW4oTUFYLE1JTixQKTsKICAgICAgICB9CiAgICB9CiAKfQogCk5vZGUqIFJlcERvd25NYXgoTm9kZSAqTUFYLCBOb2RlICpNSU4sIGludCBpbiwgaW50IHNpemUpewogICAgaW50IEI9aW47CiAgICBpbnQgTD1HZXRMZWZ0Q2hpbGQoaW4pOwogICAgaW50IFI9R2V0UmlnaHRDaGlsZChpbik7CiAgICBpZihMPHNpemUgJiYgKCpNQVhbQl0uZGF0YTwqTUFYW0xdLmRhdGEgfHwgKCpNQVhbQl0uZGF0YT09Kk1BWFtMXS5kYXRhICYmIE1BWFtCXS5kYXRhPk1BWFtMXS5kYXRhKSkpCiAgICAgICAgQj1MOwogICAgaWYoUjxzaXplICYmICgqTUFYW0JdLmRhdGE8Kk1BWFtSXS5kYXRhIHx8ICgqTUFYW0JdLmRhdGE9PSpNQVhbUl0uZGF0YSAmJiBNQVhbQl0uZGF0YT5NQVhbUl0uZGF0YSkpKQogICAgICAgIEI9UjsKICAgIGlmKEIhPWluKXsKICAgICAgICBzd2FwKE1JTltNQVhbQl0uZXFfaW5kZXhdLmVxX2luZGV4LE1JTltNQVhbaW5dLmVxX2luZGV4XS5lcV9pbmRleCk7CiAgICAgICAgc3dhcChNQVhbQl0uZGF0YSxNQVhbaW5dLmRhdGEpOwogICAgICAgIHN3YXAoTUFYW0JdLmVxX2luZGV4LE1BWFtpbl0uZXFfaW5kZXgpOwogICAgICAgIHJldHVybiBSZXBEb3duTWF4KE1BWCxNSU4sQixzaXplKTsKICAgIH0KICAgIHJldHVybiBNQVg7Cn0KIApOb2RlKiBSZXBEb3duTWluKE5vZGUgKk1BWCwgTm9kZSAqTUlOLCBpbnQgaW4sIGludCBzaXplKXsKICAgIGludCBTPWluOwogICAgaW50IEw9R2V0TGVmdENoaWxkKGluKTsKICAgIGludCBSPUdldFJpZ2h0Q2hpbGQoaW4pOwogICAgaWYoTDxzaXplICYmICgqTUlOW1NdLmRhdGE+Kk1JTltMXS5kYXRhIHx8ICgqTUlOW1NdLmRhdGE9PSpNSU5bTF0uZGF0YSAmJiBNSU5bU10uZGF0YT5NSU5bTF0uZGF0YSkpKQogICAgICAgICAgICBTPUw7CiAgICAgICAgaWYoUjxzaXplICYmICgqTUlOW1NdLmRhdGE+Kk1JTltSXS5kYXRhIHx8ICgqTUlOW1NdLmRhdGE9PSpNSU5bUl0uZGF0YSAmJiBNSU5bU10uZGF0YT5NSU5bUl0uZGF0YSkpKQogICAgICAgICAgICBTPVI7CiAgICAgICAgaWYoUyE9aW4pewogICAgICAgICAgICBzd2FwKE1BWFtNSU5bU10uZXFfaW5kZXhdLmVxX2luZGV4LE1BWFtNSU5baW5dLmVxX2luZGV4XS5lcV9pbmRleCk7CiAgICAgICAgICAgIHN3YXAoTUlOW1NdLmRhdGEsTUlOW2luXS5kYXRhKTsKICAgICAgICAgICAgc3dhcChNSU5bU10uZXFfaW5kZXgsTUlOW2luXS5lcV9pbmRleCk7CiAgICAgICAgICAgIHJldHVybiBSZXBEb3duTWF4KE1BWCxNSU4sUyxzaXplKTsKICAgICAgICB9CiAKICAgIHJldHVybiBNSU47Cn0KIAp2b2lkIFJlbW92ZU1heChOb2RlKk1BWCwgTm9kZSpNSU4sIGludCAmc2l6ZSwgaW50IGluZGV4KXsKICAgIHN3YXAoTUlOW01BWFtpbmRleF0uZXFfaW5kZXhdLmVxX2luZGV4LE1JTltNQVhbc2l6ZS0xXS5lcV9pbmRleF0uZXFfaW5kZXgpOwogICAgc3dhcChNQVhbaW5kZXhdLE1BWFtzaXplLTFdKTsKICAgIFJlcERvd25NYXgoTUFYLE1JTixpbmRleCxzaXplLTEpOwogCn0KIAp2b2lkIFJlbW92ZU1pbihOb2RlKk1BWCxOb2RlKk1JTixpbnQgJnNpemUsIGludCBpbmRleCl7CiAgICBzd2FwKE1BWFtNSU5baW5kZXhdLmVxX2luZGV4XS5lcV9pbmRleCxNQVhbTUlOW3NpemUtMV0uZXFfaW5kZXhdLmVxX2luZGV4KTsKICAgIHN3YXAoTUlOW2luZGV4XSxNSU5bc2l6ZS0xXSk7CiAgICBSZXBEb3duTWluKE1BWCxNSU4saW5kZXgsc2l6ZS0xKTsKfQogCnZvaWQgQ29sbGF0ek1pbiggTm9kZSAqTUFYLCBOb2RlICpNSU4sIGludCAmc2l6ZSl7CiAgICBpZigqTUlOWzBdLmRhdGElMj09MCl7CiAgICAgICAqTUlOWzBdLmRhdGEvPTI7CiAgICAgICBpZigqTUlOWzBdLmRhdGE9PTEpewogICAgICAgICAgIFJlbW92ZU1pbihNQVgsTUlOLHNpemUsMCk7CiAgICAgICAgICAgUmVtb3ZlTWF4KE1BWCxNSU4sc2l6ZSxNSU5bc2l6ZS0xXS5lcV9pbmRleCk7CiAgICAgICAgICAgc2l6ZS0tOwogICAgICAgfQogICAgICAgZWxzZQogICAgICAgUmVwRG93bk1heChNQVgsTUlOLE1JTlswXS5lcV9pbmRleCxzaXplKTsKICAgIH0KICAgIGVsc2V7CiAgICAgICAgbG9uZyBsb25nIGludCB0bXA9MyooKk1JTlswXS5kYXRhKSsxOwogICAgICAgIGlmKHRtcD5VSU5UX01BWCl7CiAgICAgICAgICAgICpNSU5bMF0uZGF0YT0wOwogICAgICAgICAgICBSZW1vdmVNaW4oTUFYLE1JTixzaXplLDApOwogICAgICAgICAgICBSZW1vdmVNYXgoTUFYLE1JTixzaXplLE1JTltzaXplLTFdLmVxX2luZGV4KTsKICAgICAgICAgICAgc2l6ZS0tOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKk1JTlswXS5kYXRhPXRtcDsKICAgICAgICAgICAgUmVwVXBNYXgoTUFYLE1JTixNSU5bMF0uZXFfaW5kZXgpOwogICAgICAgICAgICBSZXBEb3duTWluKE1BWCxNSU4sMCxzaXplKTsKICAgICAgICB9CiAgICB9Cn0KIAp2b2lkIENvbGxhdHpNYXgoIE5vZGUgKk1BWCwgTm9kZSAqTUlOLCBpbnQgJnNpemUpewogICAgaWYoKk1BWFswXS5kYXRhJTIhPTApewogICAgICAgIGxvbmcgbG9uZyBpbnQgdG1wPTMqKCpNQVhbMF0uZGF0YSkrMTsKICAgICAgICBpZih0bXA+VUlOVF9NQVgpewogICAgICAgICAgICAqTUFYWzBdLmRhdGE9MDsKICAgICAgICAgICAgUmVtb3ZlTWF4KE1BWCxNSU4sc2l6ZSwwKTsKICAgICAgICAgICAgUmVtb3ZlTWluKE1BWCxNSU4sc2l6ZSxNQVhbc2l6ZS0xXS5lcV9pbmRleCk7CiAgICAgICAgICAgIHNpemUtLTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgKk1BWFswXS5kYXRhPXRtcDsKICAgICAgICAgICAgUmVwRG93bk1pbihNQVgsTUlOLE1BWFswXS5lcV9pbmRleCxzaXplKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlewogICAgICAgICpNQVhbMF0uZGF0YS89MjsKICAgICAgICBpZigqTUFYWzBdLmRhdGE9PTEpewogICAgICAgICAgICBSZW1vdmVNYXgoTUFYLE1JTixzaXplLDApOwogICAgICAgICAgICBSZW1vdmVNaW4oTUFYLE1JTixzaXplLE1BWFtzaXplLTFdLmVxX2luZGV4KTsKICAgICAgICAgICAgc2l6ZS0tOwogICAgICAgIH0KIAogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIFJlcFVwTWluKE1BWCxNSU4sTUFYWzBdLmVxX2luZGV4KTsKICAgICAgICAgICAgUmVwRG93bk1heChNQVgsTUlOLDAsc2l6ZSk7CiAgICAgICAgfQogCiAgICB9CiAKfQogCmludCBtYWluKCkgewogICAgaW50IGlsZSxjb249MCxrb207CiAgICBsb25nIGxvbmcgaW50IHRtcDsKICAgIGNpbj4+aWxlOwogCiAgICBsb25nIGxvbmcgaW50ICp0YWJsaWNhPW5ldyBsb25nIGxvbmcgaW50IFtpbGVdOwogICAgTm9kZSAqTWF4SGVhcD1uZXcgTm9kZSBbaWxlXTsKICAgIE5vZGUgKk1pbkhlYXA9bmV3IE5vZGUgW2lsZV07CiAgICBmb3IoaW50IGk9MDsgaTxpbGU7IGkrKyl7CiAgICAgICAgY2luPj50bXA7CiAgICAgICAgaWYodG1wPlVJTlRfTUFYKQogICAgICAgIHRhYmxpY2FbaV09MDsKICAgICAgICBlbHNlIGlmKHRtcD09MSkKICAgICAgICAgICAgdGFibGljYVtpXT0xOwogICAgICAgIGVsc2UgaWYodG1wIT0xKXsKICAgICAgICAgICAgdGFibGljYVtpXT10bXA7CiAgICAgICAgICAgIERvTm9kZShjb24sdGFibGljYStpLE1heEhlYXAsTWluSGVhcCk7CiAgICAgICAgICAgIFJlcFVwTWF4KE1heEhlYXAsTWluSGVhcCxjb24pOwogICAgICAgICAgICBSZXBVcE1pbihNYXhIZWFwLE1pbkhlYXAsY29uKTsKICAgICAgICAgICAgY29uKys7CiAgICAgICAgfQogCiAgICB9CiAKICAgIGNpbj4+a29tOwogICAgaW50IGlrb207CiAgICBjaGFyIHdnOwogICAgZm9yKGludCBpPTA7IGk8a29tOyBpKyspewogICAgICAgIGNpbj4+aWtvbT4+d2c7CiAgICAgICAgZm9yKGludCBqPTA7IGo8aWtvbTsgaisrKXsKICAgICAgICAgICAgaWYod2c9PSdzJykKICAgICAgICAgICAgICAgIENvbGxhdHpNaW4oTWF4SGVhcCxNaW5IZWFwLGNvbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIENvbGxhdHpNYXgoTWF4SGVhcCxNaW5IZWFwLGNvbik7CiAgICAgICAgfQogICAgfQogCiAgICBmb3IoaW50IGk9MDsgaTxpbGU7IGkrKyl7CiAgICAgICAgaWYodGFibGljYVtpXT09MCkgY291dDw8Im0gIjsKICAgICAgICBlbHNlCiAgICAgICAgY291dDw8dGFibGljYVtpXTw8JyAnOwogICAgfQogICAgY291dDw8ZW5kbDsKICAgIHJldHVybiAwOwp9CiA=