import java.util.*

fun main(args: Array<String>) {
    // 入力
    var (N, X, Y) = readLine()!!.split(" ").map(String::toInt)

    // 0オリジンに変換
    X--
    Y--

    // 陽に持たない
    // Graphの構造を変数に持たない
    val ans = IntArray(N)
    val INF = 1001001001

    repeat(N) { sv ->
        // println("-------------------")
        // println("支点：$sv")
        // println("-------------------")

        // 距離
        val dist = IntArray(N) { INF }

        // BFS用のqueue
        val q: Queue<Int> = ArrayDeque()

        // queueへの追加
        fun push(v: Int, d: Int) {
            if (dist[v] != INF) return
            dist[v] = d
            q.add(v)
            // println("queue:${q.joinToString(",")}")
            // println("dist:${dist.joinToString(",")}")
        }

        push(sv, 0)
        while (q.isNotEmpty()) {
            val v = q.poll()
            val d = dist[v]
            // println("v:$v, d:$d")
            if (v - 1 >= 0) push(v - 1, d + 1)
            if (v + 1 < N) push(v + 1, d + 1)
            if (v == X) push(Y, d + 1)
            if (v == Y) push(X, d + 1)
        }

        repeat(N) { i -> ans[dist[i]]++ }
    }

    repeat(N) { i -> ans[i] /= 2 }
    for (i in 1 until N) {
        println(ans[i])
    }
}



