import Control.Applicative
import Control.Monad
import Control.Monad.ST
import qualified Data.ByteString as BS
import Data.Functor
import Data.Function
import Data.Monoid
import Data.Maybe
import Data.List
import qualified Data.Foldable as Foldable
import qualified Data.Set as Set
--import qualified Data.Sequence as Sequence
import Data.List.Split
import Data.Bits
import Data.Char
import Data.Ix
import Data.Ratio
import Data.Ord
import Data.Tuple
--import Data.Array
--import Data.Array.Unboxed
import Data.Array.IArray
import Data.Array.MArray
import Data.Array.IO
import Data.Array.ST
import Data.IORef
import Data.STRef
-- import System.IO.Unsafe

-- templete
readInt = read :: String -> Int
readInteger = read :: String -> Integer
readDouble = read :: String -> Double
getInt = readLn :: IO Int
getInts = map readInt . words <$> getLine
getInteger = readLn :: IO Integer
getIntegers = map readInteger . words <$> getLine
getDouble = readLn :: IO Double
getDoubles = map readDouble . words <$> getLine
sjoin :: (Show a) => [a] -> String
sjoin = unwords . map show
cond :: a -> a -> Bool -> a
cond t f c = if c then t else f
apply2 :: (a -> a -> b) -> [a] -> b
apply2 f [x,y] = f x y
apply3 :: (a -> a -> a -> b) -> [a] -> b
apply3 f [x,y,z] = f x y z
apply4 :: (a -> a -> a -> a -> b) -> [a] -> b
apply4 f [x,y,z,w] = f x y z w
fnTuple :: (a -> b, a -> c) -> a -> (b, c)
fnTuple (f,g) a = (f a, g a)
replace :: (Eq a) => a -> a -> [a] -> [a]
replace x y = map (\z -> if z==x then y else z)
binMap :: (a -> a -> b) -> [a] -> [b]
binMap f (x:xs@(y:_)) = f x y : binMap f xs
binMap _ _ = []
splitRec :: Int -> [a] -> [[a]]
splitRec _ [] = []
splitRec n xs = let (y,ys) = splitAt n xs in y : splitRec n ys
infixl 7 `divCeil`
divCeil :: Integral a => a -> a -> a
x `divCeil` y = (x+y-1) `div` y
coverC :: Ord a => (a, a) -> a -> Bool
coverC (l,r) x = l<=x && x<=r
coverH :: Ord a => (a, a) -> a -> Bool
coverH (l,r) x = l<=x && x<r
-- templete

near (y,x) = filter (\(i,j) -> 0<=i && i<=9 && 0<=j && j<=9) [(y,x), (y-1,x), (y+1,x), (y,x-1), (y,x+1)]
through :: STArray s (Int,Int) Int -> (Int,Int) -> ST s ()
through arr (y,x) = mapM_ (\(i,j) -> readArray arr (i,j) >>= writeArray arr (i,j) . (1-)) $ near (y,x)

getBit n = getBit' 0 n
getBit' _ 0 = []
getBit' i n = if odd n then i : getBit' (i+1) (n `div` 2) else getBit' (i+1) (n `div` 2)

calc :: [[Int]] -> Int -> Maybe [(Int,Int)]
calc field b = runST $ do
    arr <- newListArray ((0,0),(9,9)) $ concat field :: ST s (STArray s (Int,Int) Int)
    res <- newSTRef [] :: ST s (STRef s [(Int,Int)])
    forM_ (getBit b) $ \x -> do
        through arr (0,x)
        modifySTRef res ((0,x):)
    forM_ [1..9] $ \y -> do
        forM_ [0..9] $ \x -> do
            c <- readArray arr (y-1,x)
            when (c==1) $ do
                through arr (y,x)
                modifySTRef res ((y,x):)
    p <- sequence [readArray arr (9,x) | x <- [0..9]]
    (guard (all (==0) p) $>) <$> readSTRef res

f field = head $ catMaybes [calc field b | b <- [0..1023]]

createField ps = runST $ do
    arr <- newArray ((0,0),(9,9)) 0 :: ST s (STArray s (Int,Int) Int)
    forM_ ps $ \p -> writeArray arr p 1
    sequence [sjoin <$> sequence [readArray arr (y,x) | x <- [0..9]] | y <- [0..9]]


main = getInt >>= flip replicateM (replicateM 10 getInts) >>= mapM_ (mapM_ putStrLn . createField . f)


Measured memory_bytes: 5596