import Data.Bits import Data.Char import Data.List main = do dat <- readFile "jurassic.in" mapM_ (pp.solve) $ parse dat parse :: String -> [[Int]] parse dat = f $ lines dat where f (sn:ls) | n == 0 = [] | otherwise = map cvt cur : f rest where n = read sn (cur,rest) = splitAt n ls cvt = foldr (\x d -> bit (ord x - ord 'A') .|. d) 0 solve xs = f 0 (0,[]) (zip [1..] xs) where f b sel [] = if b == 0 then sel else (0,[]) f b (l,ls) ((i,x):xs) = max (f b (l,ls) xs) (f (b `xor` x) (l+1,i:ls) xs) pp (l,ls) = do print l putStrLn $ concat $ intersperse " " $ map show $ reverse ls