// Original C++ solution (slower):
/* ***********************************************

Author        :taciturnity

Created Time  :2020/2/21 8:23:51

File Name     :TEST.cpp

************************************************ */



#include <iostream>

#include <vector>

#include <queue>

#include <cstdio>

#include <map>

#include <set>

#include <stack>

#include <string>

#include <cmath>

#include <bitset>

#include <cstring>

#include <cstdlib>

#include <algorithm>

#define ll long long

#define INF 0x3f3f3f3f

#define rep(i,x,y) for(int i = x;i <= y;++i)

#define fori(i,x,y) for(int i = x;i >= y; -- i)

#define bug puts("--------------")

#define out(x) cout<<x<<'\n';

inline char gc(){char op[2];scanf("%s",op);return op[0];}

const int N = 2e5+10;

const double eps = 0.00000001;

const ll mod = 1e9 ;

using namespace std;

ll read()

{

    ll x=0,f=1;char ch=getchar();

    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}

    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}

    return x*f;

}

vector<int> G[N];

map<int,int> hap;

bool vis[2005];

struct node{

    int x,val;

    node(){}

    node(int a,int b):x(a),val(b){}

};

void bfs(int u){

    memset(vis,0,sizeof vis);

    queue<node> q;

    q.push({u,0});

    node tmp;

    while(q.size()){

        tmp = q.front();

        int x = tmp.x,val = tmp.val;

        q.pop();

        vis[x] = 1;

        int S =  G[x].size();

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

            int y = G[x][i];

            if(!vis[y]){

                vis[y] = 1;

                hap[val+1]++;

                q.push({y,val+1});

            }

        }

    }

}

int main(){

    int  n = read(), x = read(),y = read();

    rep(i,1,n-1){

        G[i].push_back(i+1);

        G[i+1].push_back(i);

    }

    G[x].push_back(y);

    G[y].push_back(x);

    rep(i,1,n){

        bfs(i);

    }

    rep(i,1,n-1){

        cout<<hap[i]/2<<'\n';

    }

}


// Optimized solution to the same problem (faster):
/* ***********************************************

Author        :taciturnity

Created Time  :2020/2/21 8:23:51

File Name     :TEST.cpp

************************************************ */

 

#include <iostream>

#include <vector>

#include <queue>

#include <cstdio>

#include <map>

#include <set>

#include <stack>

#include <string>

#include <cmath>

#include <bitset>

#include <cstring>

#include <cstdlib>

#include <algorithm>

#define ll long long

#define INF 0x3f3f3f3f

#define rep(i,x,y) for(int i = x;i <= y;++i)

#define fori(i,x,y) for(int i = x;i >= y; -- i)

#define bug puts("--------------")

#define out(x) cout<<x<<'\n';

inline char gc(){char op[2];scanf("%s",op);return op[0];}

const int N = 1e6+10;

const double eps = 0.00000001;

const ll mod = 1e9 ;

using namespace std;

ll read()

{

    ll x=0,f=1;char ch=getchar();

    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}

    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}

    return x*f;

}

int d[2000+5][2000+5];

int cnt[2000];

int main(){

    int n = read(),x = read(),y = read();

    rep(i,1,n){

        rep(j,1,n){

            d[i][j] = abs(j-i);

        }

    }

    rep(i,1,n){

        rep(j,1,n){

            d[i][j] = min(d[i][j],d[i][x]+d[y][j]+1);

        }

    }

    rep(i,1,n){

        rep(j,i,n){

            cnt[d[i][j]]++;

        }

    }

    rep(i,1,n-1) cout<<cnt[i]<<endl;

    

}

// Fastest known solution for this problem: