{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE TypeFamilies #-}
import           Data.Maybe
import           Data.Int
import           Data.List
import           Data.Char
  -- import qualified Data.Vector.Unboxing as VU
import qualified Data.Vector as V
import qualified Data.Vector.Mutable as VM
import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Unboxed.Mutable as VUM
import qualified Data.ByteString.Char8 as BS
import           Data.List (scanl')
import           Data.IORef
import           Control.Monad
import           Control.Monad.ST
import           Control.Monad.State.Strict
import           Control.Applicative
import           Debug.Trace
import           Text.Printf


readInt = BS.readInt . BS.dropWhile isSpace
getVector f = VU.unfoldr f <$> BS.getLine
getIntVector = getVector readInt
getBSVector = getVector BS.uncons
getInt = readLn :: IO Int
getIntTuple = (\vec -> (vec VU.! 0, vec VU.! 1, vec VU.! 2)) <$> getIntVector

genGraph n x y = toUnDirectedGraph (n+1) . V.fromList $ (x,y) : zip [1..n-1] [2..n]

toDirectedGraph n input = V.create $ do
  graph <- VM.replicate n []
  V.forM_ input $ \(a,b) -> do
    VM.modify graph (b:) a
  return graph

toUnDirectedGraph n input = V.create $ do
  graph <- VM.replicate n []
  V.forM_ input $ \(a,b) -> do
    VM.modify graph (b:) a
    VM.modify graph (a:) b
  return graph

next :: V.Vector [Int] -> Int -> [Int]
next graph node = graph V.! node

dfs graph start goal = dfs' start []
  where
    next' = next graph
    dfs' now path
      | now == goal = return $ reverse $ now:path
      | otherwise = concatMap (\node -> dfs' node $ now:path) [x | x <- next' now, not (x `elem` path)]

bfs :: V.Vector [Int] -> Int -> Int -> Maybe [Int]
bfs graph start goal = bfs' [x : [start] | x <- next' start]
  where
    next' = next graph
    bfs' [] = fail "no Path"
    bfs' (path:queue)
      | goal == now = (return $ reverse path) `mplus` (bfs' queue)
      | otherwise = bfs' $ queue ++ [x : path | x <- next' now, not $ x `elem` path]
      where now = head path

solve' n x y = do
  let graph = genGraph n x y
  i <- [1..n-1]
  j <- [i+1..n]
  return $ (\n -> n - 1) . length . fromJust $ bfs graph i j

solve'' n x y = do
  let graph = genGraph n x y
  i <- [1..n-1]
  j <- [i+1..n]
  return $ fromJust $ bfs graph i j


solve n x y = map (\list -> (head list, length list)) . group . sort $ solve' n x y

main = do
  (n,x,y) <- getIntTuple
  let ans = solve n x y
      check i = if null $ filter (\n -> fst n == i) ans then 0 else snd . head $ filter (\n -> fst n == i) ans
  forM_ [1..n-1] $ \i ->
    print $ check i
