import Data.Bits (xor) import Data.Function ((&)) mix :: Int -> Int -> Int mix = xor prune :: Int -> Int prune = (`mod` 16777216) mp :: Int -> Int -> Int mp cur = prune . mix cur update :: Int -> Int update x = mp x (x * 64) & \ y -> mp y (y `div` 32) & \ z -> mp z (z * 2048) main :: IO () main = getContents >>= print . sum . map ((!! 2000) . iterate update . read) . lines