Problem:
Problem A: Unreliable Messengers

The King of a little Kingdom on a little island in the Pacific Ocean frequently has childish
ideas. One day he said, “You shall make use of a message relaying game when you inform me
of something.” In response to the King’s statement, six servants were selected as messengers
whose names were Mr. J, Miss C, Mr. E, Mr. A, Dr. P, and Mr. M. They had to relay a message
to the next messenger until the message got to the King.

Messages addressed to the King consist of digits (‘0’-‘9’) and alphabet characters (‘a’-‘z’, ‘A’-‘Z’). Capital and small letters are distinguished in messages. For example, “ke3E9Aa” is a
message.

Contrary to King’s expectations, he always received wrong messages, because each messenger
changed messages a bit before passing them to the next messenger. Since it irritated the King, he
told you who are the Minister of the Science and Technology Agency of the Kingdom, “We don’t
want such a wrong message any more. You shall develop software to correct it!” In response to
the King’s new statement, you analyzed the messengers’ mistakes with all technologies in the
Kingdom, and acquired the following features of mistakes of each messenger. A surprising point
was that each messenger made the same mistake whenever relaying a message. The following
facts were observed.

Mr. J rotates all characters of the message to the left by one. For example, he transforms
“aB23d” to “B23da”.

Miss C rotates all characters of the message to the right by one. For example, she transforms
“aB23d” to “daB23”.

Mr. E swaps the left half of the message with the right half. If the message has an odd number
of characters, the middle one does not move. For example, he transforms “e3ac” to “ace3”,
and “aB23d” to “3d2aB”.

Mr. A reverses the message. For example, he transforms “aB23d” to “d32Ba”.

Dr. P increments by one all the digits in the message. If a digit is ‘9’, it becomes ‘0’. The
alphabet characters do not change. For example, he transforms “aB23d” to “aB34d”, and “e9ac”
to “e0ac”.

Mr. M decrements by one all the digits in the message. If a digit is ‘0’, it becomes ‘9’. The
alphabet characters do not change. For example, he transforms “aB23d” to “aB12d”, and “e0ac”
to “e9ac”.

The software you must develop is to infer the original message from the final message, given the
order of the messengers. For example, if the order of the messengers is A -> J -> M -> P and the
message given to the King is “aB23d”, what is the original message? According to the features
of the messengers’ mistakes, the sequence leading to the final message is

A J M P
“32Bad” --> “daB23” --> “aB23d” --> “aB12d” --> “aB23d”.

As a result, the original message should be “32Bad”.

Input

The input format is as follows.

n
The order of messengers
The message given to the King
.
.
.
The order of messengers
The message given to the King

The first line of the input contains a positive integer n, which denotes the number of data sets.
Each data set is a pair of the order of messengers and the message given to the King. The
number of messengers relaying a message is between 1 and 6 inclusive. The same person may
not appear more than once in the order of messengers. The length of a message is between 1
and 25 inclusive.

Output

The inferred messages are printed each on a separate line.

Sample Input

5
AJMP
aB23d
E
86AE
AM
6
JPEM
WaEaETC302Q
CP
rTurnAGundam1isdefferentf

Output for the Sample Input

32Bad
AE86
7
EC302QTWaEa
TurnAGundam0isdefferentfr

Solution in JAVA (judge verdict: Wrong Answer)

import java.io.InputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.InputMismatchException;
import java.util.NoSuchElementException;
import java.math.BigInteger;

public class Main{

static PrintWriter out;
static InputReader ir;

static void solve(){
 int n=ir.nextInt();
 char[] com;
 String s;
 while(n-->0){
  com=ir.next().toCharArray();
  s=ir.next();
  for(int i=com.length-1;i>=0;i--){
   if(com[i]=='J') J(s);
   else if(com[i]=='C') C(s);
   else if(com[i]=='E') E(s);
   else if(com[i]=='A') A(s);
   else if(com[i]=='P') P(s);
   else M(s);
  }
  out.println(s);
 }
}

public static void J(String s){
 s=s.substring(1)+s.substring(0,1);
}

public static void C(String s){
 s=s.substring(s.length()-1)+s.substring(0,s.length()-1);
}

public static void E(String s){
 if(s.length()%2==0){
  s=s.substring(s.length()/2)+s.substring(0,s.length()/2);
 }
 else{
  s=s.substring((s.length()+1)/2)+s.substring((s.length()-1)/2,(s.length()+1)/2)+s.substring(0,(s.length()-1)/2);
 }
}

public static void A(String s){
 s=new StringBuilder(s).reverse().toString();
}

public static void P(String s){
 char[] ss=s.toCharArray();
 for(int i=0;i<s.length();i++){
  if(!(ss[i]>='0'&&ss[i]<='9')) continue;
  if(ss[i]=='9') ss[i]='0';
  else ss[i]++;
 }
 s=String.valueOf(ss);
}

public static void M(String s){
 char[] ss=s.toCharArray();
 for(int i=0;i<s.length();i++){
  if(!(ss[i]>='0'&&ss[i]<='9')) continue;
  if(ss[i]=='0') ss[i]='9';
  else ss[i]--;
 }
 s=String.valueOf(ss);
}

public static void main(String[] args) throws Exception{
 ir=new InputReader(System.in);
 out=new PrintWriter(System.out);
 solve();
 out.flush();
}

static class InputReader {
 private InputStream in;
 private byte[] buffer=new byte[1024];
 private int curbuf;
 private int lenbuf;

 public InputReader(InputStream in) {this.in=in; this.curbuf=this.lenbuf=0;}
 
 public boolean hasNextByte() {
  if(curbuf>=lenbuf){
   curbuf= 0;
   try{
    lenbuf=in.read(buffer);
   }catch(IOException e) {
    throw new InputMismatchException();
   }
   if(lenbuf<=0) return false;
  }
  return true;
 }

 private int readByte(){if(hasNextByte()) return buffer[curbuf++]; else return -1;}
 
 private boolean isSpaceChar(int c){return !(c>=33&&c<=126);}
 
 private void skip(){while(hasNextByte()&&isSpaceChar(buffer[curbuf])) curbuf++;}
 
 public boolean hasNext(){skip(); return hasNextByte();}
 
 public String next(){
  if(!hasNext()) throw new NoSuchElementException();
  StringBuilder sb=new StringBuilder();
  int b=readByte();
  while(!isSpaceChar(b)){
   sb.appendCodePoint(b);
   b=readByte();
  }
  return sb.toString();
 }
 
 public int nextInt() {
  if(!hasNext()) throw new NoSuchElementException();
  int c=readByte();
  while (isSpaceChar(c)) c=readByte();
  boolean minus=false;
  if (c=='-') {
   minus=true;
   c=readByte();
  }
  int res=0;
  do{
   if(c<'0'||c>'9') throw new InputMismatchException();
   res=res*10+c-'0';
   c=readByte();
  }while(!isSpaceChar(c));
  return (minus)?-res:res;
 }
 
 public long nextLong() {
  if(!hasNext()) throw new NoSuchElementException();
  int c=readByte();
  while (isSpaceChar(c)) c=readByte();
  boolean minus=false;
  if (c=='-') {
   minus=true;
   c=readByte();
  }
  long res = 0;
  do{
   if(c<'0'||c>'9') throw new InputMismatchException();
   res=res*10+c-'0';
   c=readByte();
  }while(!isSpaceChar(c));
  return (minus)?-res:res;
 }

 public double nextDouble(){return Double.parseDouble(next());}

 public int[] nextIntArray(int n){
  int[] a=new int[n];
  for(int i=0;i<n;i++) a[i]=nextInt();
  return a;
 }

 public long[] nextLongArray(int n){
  long[] a=new long[n];
  for(int i=0;i<n;i++) a[i]=nextLong();
  return a;
 }

 public char[][] nextCharMap(int n,int m){
  char[][] map=new char[n][m];
  for(int i=0;i<n;i++) map[i]=next().toCharArray();
  return map;
 }
}
}