#include <algorithm>
#include <bitset>
#include <cassert>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <stack>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define len(X) ((int)(X).size())

#ifdef __LOCAL
#define DBG(X) cout << #X << "=" << (X) << '\n';
#define SAY(X) cout << (X) << '\n';
#else
#define DBG(X)
#define SAY(X)
#endif

using namespace std;

using ll = long long int;
using ull = unsigned long long int;
using ld = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;

const int INT_INF = (int)(2e9);
const ll  LL_INF = (ll)(2e18);

const int NIL = -1;
static mt19937 _g(time(nullptr));

std::string pad(int num)
{
    char buffer[4];
    std::snprintf(buffer, sizeof(buffer), "%03d", num);
    return buffer;
}

inline ll randint(ll a, ll b) { ll w = (_g() << 31LL) ^ _g(); return a + w % (b - a + 1); }
inline void fast_io() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); };
template<typename T> inline T sign(T x) { return T(x > 0) - T(x < 0); }
template<typename T, typename S> inline ostream& operator<<(ostream& os, const pair<T, S> p) { cout << "[" << p.first << ";" << p.second << "]"; return os; }
template<typename T> inline ostream& operator<<(ostream& os, const vector<T>& v) { for (auto el : v) cout << el << " "; return os; }
template<typename T> inline T fetch() { T ret; cin >> ret; return ret; }
template<typename T> inline vector<T> fetch_vec(int sz) { vector<T> ret(sz); for (auto& elem : ret) cin >> elem; return ret; }

#ifdef _MSC_VER
#  include <intrin.h>
#  define __builtin_popcount __popcnt
#endif


void BFS(int start, int N, int X, int Y, unordered_map<int, unordered_set<int>> &res) {

    vector<bool> visited(N + 2, false);
    visited[0] = true;
    visited[N+1] = true;

    queue<int> q;
    q.push(start);
    visited[start] = true;
    int len = 0;

    while (!q.empty()) {

        ++len;
        int n = q.size();

        for (int i = 0; i < n; ++i) {

            int node = q.front();
            q.pop();

            if (!visited[node - 1]) {
                visited[node - 1] = true;
                res[len].insert(min(start, node - 1) + 10000 * max(start, node - 1));
                q.push(node-1);
            }
            if (!visited[node + 1]) {
                visited[node + 1] = true;
                res[len].insert(min(start, node + 1) + 10000 * max(start, node + 1));
                q.push(node+1);
            }

            if (node == X && !visited[Y]) {
                visited[Y] = true;
                res[len].insert(min(start, Y) + 10000 * max(start, Y));
                q.push(Y);
            }

            if (node == Y && !visited[X]) {
                visited[X] = true;
                res[len].insert(min(start, X) + 10000 * max(start, X));
                q.push(X);
            }
        }


    }

}

int solve()
{
    int N, X , Y;

    std::cin >> N >> X >> Y;

    unordered_map<int, unordered_set<int>> res;

    for (int i = 1; i <= N; ++i)
        BFS(i, N, X, Y, res);

    for (int i = 1; i < N; ++i)
        cout << res[i].size() << endl;

    return 0;
}

int main()
{
//    std::cout << solve() << std::endl;
    solve();

    return 0;
}

Measured memory_bytes: 92544