#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map>

using namespace std;

const int maxn=4e4+5;

bool RH,RV,R;
int row[maxn],colum[maxn];
int A,B,C,D,E,F,G,n,q;

struct HashMap
{
    int mod;
    int begin[100007],next[maxn],val[maxn],key[maxn];
    int s,i,num;
    void ini()
    {
        mod=100007;
        memset(begin,-1,sizeof(begin));
        num=0;
    }
    int back(int x,int y)
    {
        s=x*n+y;
        for(i=begin[s%mod];i!=-1;i=next[i])
            if(key[i]==s)return val[i];
        return (A*(long long)x+B*(long long)y)%C;
    }
    void change(int x,int y,int k)
    {
        s=x*n+y;
        for(i=begin[s%mod];i!=-1;i=next[i])
            if(key[i]==s)
            {
                val[i]=k;
                return;
            }
        key[num]=s;
        val[num]=k;
        s=s%mod;
        next[num]=begin[s];
        begin[s]=num++;
    }
}S;

void change(int &r,int &c)
{
    if(R)swap(r,c);
    if(RH)r=row[n+1-r];
    else r=row[r];
    if(RV)c=colum[n+1-c];
    else c=colum[c];
}

const int mod=1e9+7;

int r1,r2,c1,c2,r,c,v;
char s[10];

int main()
{
    scanf("%d%d",&n,&q);
    scanf("%d%d%d%d%d%d%d",&A,&B,&C,&D,&E,&F,&G);
    S.ini();
    for(int i=1;i<=n;i++)
        row[i]=colum[i]=i;
    RH=RV=R=false;
    for(int i=0;i<q;i++)
    {
        scanf("%s",s);
        if(s[0]=='W')
        {
            scanf("%d%d%d",&r,&c,&v);
            change(r,c);
            S.change(r,c,v);
        }
        else if(s[0]=='C')
        {
            scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
            change(r1,c1);
            change(r2,c2);
            S.change(r2,c2,S.back(r1,c1));
        }
        else if(s[0]=='S')
        {
            if(s[1]=='R')
            {
                scanf("%d%d",&r1,&r2);
                c1=c2=0;
                if(R)
                {
                    swap(r1,c1);
                    swap(r2,c2);
                }
                if(r1&&RH)r1=n+1-r1,r2=n+1-r2;
                if(c1&&RV)c1=n+1-c1,c2=n+1-c2;
                if(r1)swap(row[r1],row[r2]);
                if(c1)swap(colum[c1],colum[c2]);
            }
            else if(s[1]=='C')
            {
                scanf("%d%d",&c1,&c2);
                r1=r2=0;
                if(R)
                {
                    swap(r1,c1);
                    swap(r2,c2);
                }
                if(r1&&RH)r1=n+1-r1,r2=n+1-r2;
                if(c1&&RV)c1=n+1-c1,c2=n+1-c2;
                if(r1)swap(row[r1],row[r2]);
                if(c1)swap(colum[c1],colum[c2]);
            }
        }
        else if(s[0]=='R')
        {
            if(s[1]=='L')
            {
                if(R)RH=!RH;
                else RV=!RV;
                R=!R;
            }
            else if(s[1]=='R')
            {
                if(R)RV=!RV;
                else RH=!RH;
                R=!R;
            }
            else if(s[1]=='H')
            {
                if(!R)RH=!RH;
                else RV=!RV;
            }
            else if(s[1]=='V')
            {
                if(!R)RV=!RV;
                else RH=!RH;
            }
        }
    }
    long long ans=314159265LL;
    for(int i=D;i<=E;i++)
        for(int j=F;j<=G;j++)
        {
            r=i,c=j;
            change(r,c);
            ans=(ans*31+S.back(r,c))%mod;
        }
    printf("%d\n",(int)ans);
    return 0;
}

Measured memory_bytes: 1868