import qualified Data.Set as S

main = interact $ (\n -> unlines . map (\l-> unwords . map (show . solve n l) $ [1..n-1]) $ [1..n-1]) . read

solve::Int->Int->Int->Int
solve n i j = s 0 ([(1,1)], S.fromList[(1,1)]) where
    s::Int->([(Int,Int)],S.Set(Int,Int))->Int
    s k (l,v)
        | (n,n) `S.member` v = k
        | null l = negate 1
        | otherwise = s (k+1) $ b l v []
    b::[(Int,Int)]->S.Set(Int,Int)->[(Int,Int)]->([(Int,Int)],S.Set(Int,Int))
    b [] v c = (c, v)
    b (x:xs) v c = b xs (S.union v $ S.fromList l) $ c ++ l where
        l = filter (f v) (g x)
    f::S.Set(Int,Int)->(Int,Int)->Bool
    f v x@(i,j)
        | i < 1 || i > n || j < 1 || j > n = False 
        | x `S.member` v = False
        | otherwise = True
    g::(Int,Int)->[(Int,Int)]
    g (ii, jj) = [(ii + iii, jj + jjj) | (iii, jjj) <- [(i,j),(-i,j),(i,-j),(-i,-j),(j,i),(-j,i),(j,-i),(-j,-i)]]