import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Unboxed.Mutable as VUM
import qualified Data.ByteString.Char8 as BS
import Control.Monad
import Data.List

distance :: (Int,Int) -> (Int,Int) -> (Int,Int)
distance (x,y) (i,j) = (minimum [j-i,abs (x-i)+1+abs (y-j),abs (y-i)+1+abs (x-j)]-1,1)

main :: IO ()
main = do
    (n,x,y) <- (\vec -> (vec VU.! 0, vec VU.! 1, vec VU.! 2)) . VU.unfoldrN 3 readInt <$> BS.getLine
    VU.mapM_ print $ VU.accum (+) (VU.replicate (n-1) 0) [distance (x,y) (i,j) | i <- [1..n-1], j <- [i+1..n]]
    

readInt :: BS.ByteString -> Maybe (Int,BS.ByteString)
readInt xs = do
    (x,ys) <- BS.readInt xs
    return (x,BS.tail ys)