import qualified Data.Set as S main = do contents <- getContents let freqs = cycle $ map toInt (lines contents) print $ findDouble (S.empty :: S.Set Int) 0 freqs toInt :: String -> Int toInt (x:xs) = if x == '+' then read xs :: Int else -(read xs :: Int) findDouble :: S.Set Int -> Int -> [Int] -> Int findDouble history total (x:xs) | S.member total history = total | otherwise = findDouble nextHist nextTotal xs where nextHist = S.insert total history nextTotal = total + x