#include<iostream>
#include<string>
#include<algorithm>
#include<cstring>
#include<cctype>

using namespace std;

string revJ(string t){
  string ret = t;
  ret.insert(ret.begin(),t[t.length()-1]);
  ret.erase(ret.end()-1);
  return ret;
}
string revC(string t){
  string ret = t;
  ret += t[0];
  ret.erase(ret.begin());
  return ret;
}
string revE(string t){
  char c=0;
  if(t.length()==1)return t;
  if(t.length()%2){
    c = t[t.length()/2];
    t.erase(t.begin()+t.length()/2);
  }
  string l = t.substr(0,t.length()/2);
  string r = t.substr(t.length()/2,t.length()-t.length()/2);
  if(c){
    return r+c+l;
  }else return r+l;
}
string revA(string t){
  string ret = t;
  reverse(ret.begin(),ret.end());
  return ret;
}
string revP(string t){
  //dec
  string ret = t;
  for(int i = 0; i < (signed)ret.length(); ++i){
    if( isdigit(ret[i]) ){
      ret[i]--;
      if(ret[i]<'0')ret[i]='9';
    }
  }
  return ret;
}
string revM(string t){
  //inc
  string ret = t;
  for(int i = 0; i < (signed)ret.length(); ++i){
    if( isdigit(ret[i]) ){
      ret[i]++;
      if(ret[i]>'9')ret[i]='0';
    }
  }
  return ret;
}

int main()
{
  int n;
  cin >> n;
  for(int i = 0; i < n; ++i){
    string order;
    string msg;
    cin >> order >> msg;
    for(int i = (int)order.length()-1; i>=0; --i){
      if( order[i] == 'J' ){
	msg = revJ( msg );
      }
      if( order[i] == 'C' ){
	msg = revC( msg );
      }
      if( order[i] == 'E' ){
	msg = revE( msg );
      }
      if( order[i] == 'A' ){
	msg = revA( msg );
      }
      if( order[i] == 'P' ){
	msg = revP( msg );
      }
      if( order[i] == 'M' ){
	msg = revM( msg );
      }
    }
    cout << msg << endl;
  }
  return 0;
}