zoj 1009


2日で木が問題を作ったことがあります...実験の授業の時、木は用事があって、問題をしました.穴のお父さんは最后に意外にもネットに乗れません...幸いにも寮に帰ってすぐに渡した.の
/*
zoj_1009      
       。。          。。
        :
          ,       x   x'          , x'=x+dx;
                  dx       :
    int rotor[m];                m     。
               BADFEC,         {1, -1, 1, 2, 0, 3},
     rotor     ,              ,  {3, 1, -1, 1, 2, 0};

                ,        ,           ,   change()  
           
*/
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string s[3];
int rotor[3][60];
string model="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int co1,co2,co3;

void change( int n )
{
    int i,j,t,temp[3][60];
    for( i=0;i<3;i++ )
    {
        for( j=0;j<n;j++ )
        {
            t=j+rotor[i][j];
            temp[i][t]=-rotor[i][j];
            temp[i][t]=( temp[i][t]+n )%n ;
        }
    }
    for( i=0;i<3;i++ )
    {
        for( j=0;j<n;j++ )
            rotor[i][j+n]=rotor[i][j]=temp[i][j];
    }
}

void output( char c,int n )
{
    int i,t,sta[3];
    sta[2]=n-co3;
    sta[1]=n-co2;
    sta[0]=n-co1;
   /* for( i=2;i>=0;i-- )
        cout<<sta[i];
    cout<<endl;*/
    for( i=2;i>=0;i-- )
    {
        t=rotor[i][ sta[i]+c-'A' ];
        c='A'+( c-'A'+t )%n;
    }
    co1++;
    if( co1==n )
    {
        co2++;
        co1=0;
        if( co2==n )
        {
            co3++;
            co2=0;
            if( co3==n )
                co3=0;
        }
    }
    cout<<char( c-('A'-'a') );
}

int main()
{
    int n,m,i,j,first,count;
    string temp;
    first=1;
    while( cin>>n && n )
    {
        for( i=0;i<3;i++ )
        {
            cin>>s[i];
            for( j=0;j<n;j++ )
                rotor[i][j]=s[i][j]-model[j];
        }
        change( n );
        /*for( i=0;i<3;i++ )
        {
            for( j=0;j<n;j++ )
                cout<<rotor[i][j]<<" ";
            cout<<endl;
        }*/
        cin>>m;
        if( first!=1 )  cout<<endl;
        cout<<"Enigma "<<first<<":
"; while( m-- ) { cin>>temp; co1=co2=co3=0; for( i=0;i<temp.size();i++ ) { output( temp[i],n ); } cout<<endl; } first++; } return 0; }