import sys
import random
import copy
class Permutation:
def __init__(self, perm, n = None):
if perm == None:
if n == None:
raise ValueError()
self.perm = [i for i in range(0,n)]
else: self.perm = perm
self.size = len(self.perm)
def __mul__(self, other):
if self.size != other.size or self.size == None or self.perm == None or other.perm == None:
raise ValueError()
pi = Permutation(None, self.size)
for i in range(0, self.size):
pi.perm[i] = self.perm[other.perm[i]]
return pi
def __invert__(self):
if self.size == 0:
raise ValueError()
pi = Permutation(None, self.size)
for i in range(0, pi.size):
pi.perm[self.perm[i]] = i
return pi
class Enigma:
def __init__(self, P, U, *rot):
self.P = Permutation(P)
self.U = Permutation(U)
self.rot = []
for arg in rot:
self.rot.append(Permutation(arg))
def crypt(self, text):
res = []
for kk in range(0, len(text)):
k = int(kk)
p = []
for i in range(0, len(self.rot)):
p.append(Permutation([int((k+i)%self.P.size) for i in range(0, self.P.size)]))
k = k / self.P.size
pi = copy.deepcopy(self.P)
i = 0
for pi2 in self.rot:
pi = pi * p[i] * pi2 * (~p[i])
i += 1
i = len(self.rot) - 1
pi = pi * self.U
for pi2 in reversed(self.rot):
pi = pi * p[i] * (~pi2) * (~p[i])
i -= 1
pi = pi * (~self.P)
res.append(chr(pi.perm[ord(text[kk])]))
return "".join(res)
def decrypt(self, text):
self.U = ~self.U
res = self.crypt(text)
self.U = ~self.U
return res
def main():
tmp = [i for i in range(0, 4)]
random.shuffle(tmp)
tmp = Permutation(tmp)
text = sys.stdin.read()
s = []
for j in range(0,5):
s.append([i for i in range(0, 256)])
random.shuffle(s[j])
e = Enigma(s[0], s[1], s[2], s[3], s[4])
print(e.decrypt(e.crypt(text)))
if __name__ == "__main__":
main()