#pragma warning(disable:4786) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define MEM(a, b) memset(a, (b), sizeof(a)) #define CLR(a) memset(a, 0, sizeof(a)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define ABS(X) ( (X) > 0 ? (X) : ( -(X) ) ) #define S(X) ( (X) * (X) ) #define SZ(V) (int )V.size() #define FORN(i, n) for(i = 0; i < n; i++) #define FORAB(i, a, b) for(i = a; i <= b; i++) #define ALL(V) V.begin(), V.end() #define IN(A, B, C) ((B) <= (A) && (A) <= (C)) typedef pair PII; typedef pair PDD; typedef vector VI; typedef vector VP; #define AIN(A, B, C) assert(IN(A, B, C)) //typedef int LL; typedef long long int LL; //typedef __int64 LL; LL L[1003]; char S[1003]; LL dmul(LL a, LL b, LL M) { LL ans = 0; for(int i = 1; i <= b; i++) ans = (ans + a) % M; return ans; } LL mul(LL a, LL b, LL M) { if(b < 10) return dmul(a, b, M); LL x = dmul(a, b % 10, M); LL y = mul(a, b / 10, M); y = dmul(y, 10, M); y = (y + x) % M; return y; } int main() { int T; LL a, b, c; int head, tail, n, i, side; LL p, q; LL LIM = 1000000000; LIM *= LIM; scanf("%d", &T); AIN(T, 1, 100); while(T--) { scanf("%d", &n); AIN(n, 1, 1000); for(i = 0; i < n; i++) { scanf("%lld", &L[i]); AIN(L[i], 0, LIM); } scanf("%lld %lld %lld", &a, &b, &c); AIN(a, 0, LIM); AIN(b, 0, LIM); AIN(c, 2, LIM); scanf("%s", S); side = 0; p = 1, q = 0; head = 0, tail = n - 1; FORN(i, n) { if(i) printf(" "); if(S[i] == 'R') side ^= 1; if(S[i] == 'A') q = (q + a) % c; if(S[i] == 'M') p = mul(p, b, c), q = mul(b, q, c); if(side == 0) { L[head] = (mul(L[head], p, c) + q) % c; printf("%lld", L[head++]); } else { L[tail] = (mul(L[tail], p, c) + q) % c; printf("%lld", L[tail--]); } } printf("\n"); } return 0; }