import math
#from Numeric import *
Q=[[1,0,4,3,2],[3,2,1,0,4],[4,3,0,2,1],[0,1,2,4,3],[2,4,3,1,0]]
msg1=[0,0,0,0,0]
e_par=[[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
g=0

def Q_par(Q,e_par):
   for i in range(0,5):
      for j in range(0,5):
         e_par[i][Q[i][j]]=j

def Q_e_a(a,Q,string,strlen,x):
   if x<4:
      string[0]=Q[a][string[0]]
      for i in range(1,strlen):
         string[i]=Q[string[i-1]][string[i]]
   else:
      string[0]=Q[a][string[0]]
      print string[0]
      g=0
      msg1[g]=string[0]
      g=1
      for i in range(1,strlen):
         string[i]=Q[string[i-1]][string[i]]
         print string[i]
         msg1[g]=string[i]
         g=g+1

def Q_e_d(a,e_par,string,strlen,y): 
   print a
   print string	
   if y>0:
      dummy1=e_par[a][string[0]]
      for i in range(0,strlen-1):
	 j=i
         dummy2=string[j]
	 string[j]=dummy1
         dummy1=e_par[dummy2][string[j+1]]
   else:
      print "The decrypted message:"
      dummy1=e_par[a][string[0]]
      print dummy1
      i=0
      for i in range(strlen-2):
         dummy2=string[i]
	 j=i
	 string[j]=dummy1
         dummy1=e_par[dummy2][string[j+1]]
         print dummy1
	 

def Q_encrypt(msg,msglen,passwd,passwd_len):
   for l in range(msglen):
      Q_e_a(passwd[l],Q,msg,msglen,l)

def Q_decrypt(msg,msglen,passwd,passwdlen):
   for i in range(5):
      for j in range(5):
	 k=Q[i][j]     
         e_par[i][k]=j
   print e_par
   passwd.reverse()
   print passwd	
   l=0	
   for l in range(5):
      Q_e_d(passwd[l],e_par,msg,msglen,l)
      
def main():
   msg=[]
   print "Enter the message"
   for i in range(5):
	msg.append(int(raw_input()))

   msglen=5
   passwd=[]
   print "Enter the password"
   for i in range(5):
	passwd.append(int(raw_input()))
	#passwd[i]=p
   passwdlen=5
   Q_encrypt(msg,msglen,passwd,passwdlen)	
   print "*******************"
   print msg1
   print "---------------"
   Q_decrypt(msg1,g+1,passwd,passwdlen)


if __name__ == '__main__':
   main()
