-- $Id: nestedloop.ghc,v 1.1 2001/02/22 23:22:11 doug Exp $
-- http://www.bagley.org/~doug/shootout/
-- from Brian Gregor

module Main where

import System(getArgs, exitWith, ExitCode(..))
import Numeric(readDec)

main = do
        arg <- getArgs
        case arg of
         [number] -> let n = fst (head (readDec number)) in
                     putStrLn (show (loopA n n 0))
         _      -> exitWith (ExitFailure 1)

loopA :: Int -> Int -> Int -> Int
loopA n m x 
   | n > 0         = loopA (n-1) m (loopB m m x)
   | otherwise     = x

loopB :: Int -> Int -> Int -> Int
loopB n m x
   | n > 0         = loopB (n-1) m (loopC m m x)
   | otherwise     = x

loopC :: Int -> Int -> Int -> Int
loopC n m x
   | n > 0         = loopC (n-1) m (loopD m m x)
   | otherwise     = x

loopD :: Int -> Int -> Int -> Int
loopD n m x
   | n > 0         = loopD (n-1) m (loopE m m x)
   | otherwise     = x

loopE :: Int -> Int -> Int -> Int
loopE n m x
   | n > 0         = loopE (n-1) m (loopF m x)
   | otherwise     = x

loopF :: Int -> Int -> Int 
loopF n x
   | n > 0         = loopF (n-1) (x+1)
   | otherwise     = x