+import Data.Maybe
+import Data.List ( maximumBy, filter, length, concat )
+import Data.Int ( Int32 )
+
+#if defined(__GLASGOW_HASKELL__)
+import GHC.Num
+import GHC.Real ( Integral(..), fromIntegral )
+
+import GHC.IOBase ( IO, IOArray, newIOArray, readIOArray, writeIOArray,
+ unsafeReadIOArray, unsafeWriteIOArray,
+ IORef, newIORef, readIORef, writeIORef )
+import GHC.Err ( undefined )
+#else
+import Data.Char ( ord )
+import Data.IORef ( IORef, newIORef, readIORef, writeIORef )
+# if defined(__HUGS__)
+import Hugs.IOArray ( IOArray, newIOArray, readIOArray, writeIOArray,
+ unsafeReadIOArray, unsafeWriteIOArray )
+# elif defined(__NHC__)
+import NHC.IOExtras ( IOArray, newIOArray, readIOArray, writeIOArray)
+# endif
+#endif
+import Control.Monad ( when, mapM, sequence_ )
+