import Sudoku
import Control.Exception
import System.Environment
import Control.Parallel.Strategies
import Control.DeepSeq
import Data.Maybe
-- <<main
main :: IO ()
main = do
[f] <- getArgs
file <- readFile f
let puzzles = lines file
(as,bs) = splitAt (length puzzles `div` 2) puzzles -- <1>
solutions = runEval $ do
as' <- rpar (force (map solve as)) -- <2>
bs' <- rpar (force (map solve bs)) -- <2>
rseq as' -- <3>
rseq bs' -- <3>
return (as' ++ bs') -- <4>
print (length (filter isJust solutions))
-- >>