var sbox1:array[0..25] of integer = (4, 10, 11, 15, 24, 16, 17, 1, 6, 9, 3, 22, 19, 2, 0, 23, 25, 18, 13, 8, 5, 21, 7, 12, 14, 20); sbox2:array[0..25] of integer = (2, 0, 20, 13, 11, 17, 4, 3, 9, 18, 23, 15, 24, 6, 16, 14, 22, 10, 25, 12, 21, 8, 7, 5, 19, 1); numRounds:int64; key:array[0..23] of char = ('b','a','z','a','v','e','k','t','o','r','o','v','e','h','o','p','r','i','e','s','t','o','r','u'); round:int64; c:integer; ind:integer; data:array[0..1] of array [0..31] of char; function countPoints(a:array of char):integer; var i,j:integer; begin countPoints:=0; for i:=0 to 31 do begin for j:=i+1 to 31 do begin if(sbox1[ord(a[i])-ord('a')] = sbox2[ord(a[j])-ord('a')]) then countPoints:=countPoints+1; end; end; end; procedure kolo(input:array of char; var out:array of char); var i:integer; begin for i:=0 to 15 do out[i+16]:= char(ord('a') + sbox2[ord(input[i])-ord('a')]); for i:=16 to 31 do out[i-16]:= char(ord('a') + sbox1[(ord(input[i-16])-ord('a') + ord(input[i])-ord('a') + ord(key[i-16])-ord('a')) mod 26]); end; begin numRounds:=2234567*1000000+890123; round:=0; for c:=0 to 31 do read(data[0][c]); ind:=0; while round < numRounds do begin kolo(data[ind], data[1 - ind]); ind:= 1 - ind; round:=round+1; end; writeln(int(sqrt(countpoints(data[ind]) / 2.0 + 8) - 1)); end.