stablegradients/pie-gem5-pairs huggingface dataset:
// Slower C++ solution:
//nani?

//omo ta tori da

#include<bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp> // Common file

#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update

#include <ext/pb_ds/detail/standard_policies.hpp>

#define pi acos(-1);

#define fs first

#define sc second

#define pb push_back

#define mp make_pair

#define f(i,a,b) for( int i = a; i < b ; i++ )

#define sor(a) sort( a.begin(), a.end() )

#define rsor(a) sort( a.rbegin(), a.rend() )

#define fastio ios_base::sync_with_stdio(0);cin.tie(0)

#define inf 1LL<<62

typedef long long ll;

typedef double ld;

using namespace std;

using namespace __gnu_pbds;

//const ll inf=1e10;

const ll MOD=1e9+7;

const ll mod=998244353;

const ll N = 1e7 + 5;

// ac cmtr;

const int MAX_N = 2e5+5;

typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;

 

#define TRACE

#ifdef TRACE

#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)

template <typename Arg1>

void __f(const char* name, Arg1&& arg1) {

  cout << name << " : " << arg1 << endl;}

 

template <typename Arg1, typename... Args>

void __f(const char* names, Arg1&& arg1, Args&&... args) {

  const char* comma = strchr(names + 1, ',');

  cout.write(names, comma - names) << " : " << arg1<<" | ";

  __f(comma+1, args...);}

#else

#define trace(...)

#endif

//---------------------------



ll dp[2005][2005];

ll cnt[MAX_N];

ll n;

vector <pair <ll,ll > > adj[MAX_N];



void dij(ll a){



    set <pair <ll,ll> > s;

    f(i,0,n+1) {dp[i][a]=inf;}

    s.insert(mp(0,a));

    dp[a][a] = 0;

    //ans[a] = 1;

    while(!s.empty()){

        ll ini  = s.begin()->sc;s.erase(s.begin());

        for(auto xd : adj[ini]){

            if(dp[xd.fs][a] > dp[ini][a] + xd.sc){

                s.erase(mp(dp[xd.fs][a],xd.fs)); 

                //ans[xd.fs] = ans[ini];

                dp[xd.fs][a] = dp[ini][a] + xd.sc;

                s.insert(mp(dp[xd.fs][a],xd.fs));

            }

        }

        

    }

  return;

}



int main(){

    fastio;

    ll x,y;

    cin>>n>>x>>y;

    f(i,1,n){

        adj[i].pb({i+1,1});

        adj[i+1].pb({i,1});

    }

    adj[x].pb({y,1});

    adj[y].pb({x,1});

    f(i,1,n+1){

        dij(i);

    }

    f(i,1,n+1){

        for(int j=1;j<=n;j++){

            cnt[dp[i][j]]++;

        }

    }

    f(i,1,n){

        cout<<cnt[i]/2<<" "<<endl;

    }





   

}

// Faster C++ solution for the same problem (measured speedup: 6.611425096853032x):
#include<cstdio>

#include<cstring>

#include<iostream>

#include<cmath>

#include<algorithm>

using namespace std;

#define ufor(i,l,r) for (int i=l;i<=r;i++)

#define MAXN 2050

int a[MAXN],d[MAXN][MAXN];

int n;





int main()

{

	int X,Y;

	scanf("%d%d%d",&n,&X,&Y);

	ufor (i,1,n)

	ufor (j,1,n) d[i][j]=abs(i-j);

	d[X][Y]=d[Y][X]=1;

	

	bool flag=true;

	while (flag)

	{

		flag=false;

		ufor (i,1,n)

		ufor (j,1,n)

		{

			int x=min(d[i][X]+d[X][j],d[i][Y]+d[Y][j]);	

			if (x<d[i][j]) d[i][j]=x,flag=true;

		}

	}



	ufor (i,1,n-1)

	ufor (j,i+1,n) a[d[i][j]]++;

	

	ufor (i,1,n-1)

	printf("%d\n",a[i]);

	return 0;

}
// Slower C++ solution:
#include "bits/stdc++.h"

using namespace std;



#define pb push_back

#define fr(i, n) for(int i = 0; i < n; i++)

#define frr(i, n) for(int i = 1; i <= n; i++)



#define dbg(x) cout << #x << " = " << x << endl

#define all(x) x.begin(),x.end()

#define ms(x, i) memset(x, i, sizeof(x))



#define p(x) cout << x << "\n"

#define pv(x) fr(i, x.size()) cout << x[i] << " \n"[i==x.size()-1]



#define f first

#define s second



#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)



typedef long long int ll;

typedef long double ld;

typedef pair<int,int> pii;

typedef pair<ll,ll> pll;

typedef vector<int> vi;

typedef vector<ll> vl;



const int INF = 0x3f3f3f3f;

const ll LINF = 0x3f3f3f3f3f3f3f;



#define maxn 2123



vi adj[maxn];

int ans[maxn], vis[maxn];



int main() {

    fastio;

    int n, x, y;

    cin >> n >> x >> y;



    frr(i, n-1) {

        adj[i].pb(i+1);

        adj[i+1].pb(i);

    }



    adj[x].pb(y);

    adj[y].pb(x);



    frr(i, n) {

        ms(vis, 0);



        queue<pii> q;

        q.push({0, i});

        while (!q.empty()) {

            int u = q.front().s;

            int d = q.front().f;

            q.pop();



            if (vis[u]) continue;

            vis[u] = 1;



            if (u > i) ans[d]++;

            for (auto v: adj[u]) q.push({d+1, v});

        }

    }



    frr(i, n-1) p(ans[i]);

}


// Faster C++ solution for the same problem (measured speedup: 1.1112964687944082x):
#include<cstdio>

#include<cstring>

#include<iostream>

#include<cmath>

#include<algorithm>

using namespace std;

#define ufor(i,l,r) for (int i=l;i<=r;i++)

#define MAXN 2050

int a[MAXN],d[MAXN][MAXN];

int n;





int main()

{

	int X,Y;

	scanf("%d%d%d",&n,&X,&Y);

	ufor (i,1,n)

	ufor (j,1,n) d[i][j]=abs(i-j);

	d[X][Y]=d[Y][X]=1;

	

	bool flag=true;

	while (flag)

	{

		flag=false;

		ufor (i,1,n)

		ufor (j,1,n)

		{

			int x=min(d[i][X]+d[X][j],d[i][Y]+d[Y][j]);	

			if (x<d[i][j]) d[i][j]=x,flag=true;

		}

	}



	ufor (i,1,n-1)

	ufor (j,i+1,n) a[d[i][j]]++;

	

	ufor (i,1,n-1)

	printf("%d\n",a[i]);

	return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



#define pb push_back

#define inf INT_MAX

#define pii pair<int,int>

#define f first

#define s second

#define mp make_pair

#define mod 1000000009

#define ld long double

#define eps 1e-8

#define MAXN 2123



vector<pii> are[MAXN];

int dis[MAXN];

int val[MAXN];



void dij(int x){

    for(int i=0;i<MAXN;i++)dis[i]=-1;

    priority_queue<pii> q;

    dis[x]=0;q.push(mp(0,x));

    while(!q.empty()){

        x=q.top().s;int c=-q.top().f;q.pop();

        if(dis[x]!=c)continue;

        for(pii at:are[x]){

            int y=at.s,c=at.f;

            if(dis[y]==-1||dis[x]+c<dis[y]){

                dis[y]=dis[x]+c;

                q.push(mp(-dis[y],y));

            }

        }

    }

    for(int i=0;i<MAXN;i++)val[dis[i]]++;

}



int32_t main (){



    ios::sync_with_stdio(false);

    cin.tie(0);

    cout<<setprecision(2)<<fixed;



    int n,x,y;

    cin>>n>>x>>y;

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

        are[i].pb(mp(1,i+1));

        are[i+1].pb(mp(1,i));

    }

    x--;y--;

    are[x].pb(mp(1,y));

    are[y].pb(mp(1,x));



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



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

        cout<<val[i]/2<<endl;

    }



    return 0;

}




// Faster C++ solution for the same problem (measured speedup: 1.160193406349987x):
#include<cstdio>

#include<cstring>

#include<iostream>

#include<cmath>

#include<algorithm>

using namespace std;

#define ufor(i,l,r) for (int i=l;i<=r;i++)

#define MAXN 2050

int a[MAXN],d[MAXN][MAXN];

int n;





int main()

{

	int X,Y;

	scanf("%d%d%d",&n,&X,&Y);

	ufor (i,1,n)

	ufor (j,1,n) d[i][j]=abs(i-j);

	d[X][Y]=d[Y][X]=1;

	

	bool flag=true;

	while (flag)

	{

		flag=false;

		ufor (i,1,n)

		ufor (j,1,n)

		{

			int x=min(d[i][X]+d[X][j],d[i][Y]+d[Y][j]);	

			if (x<d[i][j]) d[i][j]=x,flag=true;

		}

	}



	ufor (i,1,n-1)

	ufor (j,i+1,n) a[d[i][j]]++;

	

	ufor (i,1,n-1)

	printf("%d\n",a[i]);

	return 0;

}
// Slower C++ solution:
//nani?

//omo ta tori da

#include<bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp> // Common file

#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update

#include <ext/pb_ds/detail/standard_policies.hpp>

#define pi acos(-1);

#define fs first

#define sc second

#define pb push_back

#define mp make_pair

#define f(i,a,b) for( int i = a; i < b ; i++ )

#define sor(a) sort( a.begin(), a.end() )

#define rsor(a) sort( a.rbegin(), a.rend() )

#define fastio ios_base::sync_with_stdio(0);cin.tie(0)

#define inf 1LL<<62

typedef long long ll;

typedef double ld;

using namespace std;

using namespace __gnu_pbds;

//const ll inf=1e10;

const ll MOD=1e9+7;

const ll mod=998244353;

const ll N = 1e7 + 5;

// ac cmtr;

const int MAX_N = 2e5+5;

typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;

 

#define TRACE

#ifdef TRACE

#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)

template <typename Arg1>

void __f(const char* name, Arg1&& arg1) {

  cout << name << " : " << arg1 << endl;}

 

template <typename Arg1, typename... Args>

void __f(const char* names, Arg1&& arg1, Args&&... args) {

  const char* comma = strchr(names + 1, ',');

  cout.write(names, comma - names) << " : " << arg1<<" | ";

  __f(comma+1, args...);}

#else

#define trace(...)

#endif

//---------------------------



ll dp[2005][2005];

ll cnt[MAX_N];

ll n;

vector <pair <ll,ll > > adj[MAX_N];



void dij(ll a){



    set <pair <ll,ll> > s;

    f(i,0,n+1) {dp[i][a]=inf;}

    s.insert(mp(0,a));

    dp[a][a] = 0;

    //ans[a] = 1;

    while(!s.empty()){

        ll ini  = s.begin()->sc;s.erase(s.begin());

        for(auto xd : adj[ini]){

            if(dp[xd.fs][a] > dp[ini][a] + xd.sc){

                s.erase(mp(dp[xd.fs][a],xd.fs)); 

                //ans[xd.fs] = ans[ini];

                dp[xd.fs][a] = dp[ini][a] + xd.sc;

                s.insert(mp(dp[xd.fs][a],xd.fs));

            }

        }

        

    }

  return;

}



int main(){

    fastio;

    ll x,y;

    cin>>n>>x>>y;

    f(i,1,n){

        adj[i].pb({i+1,1});

        adj[i+1].pb({i,1});

    }

    adj[x].pb({y,1});

    adj[y].pb({x,1});

    f(i,1,n+1){

        dij(i);

    }

    f(i,1,n+1){

        for(int j=1;j<=n;j++){

            cnt[dp[i][j]]++;

        }

    }

    f(i,1,n){

        cout<<cnt[i]/2<<" "<<endl;

    }





   

}

// Faster C++ solution for the same problem (measured speedup: 6.602119927645609x):
#include <iostream>

#include <cstdio>

#include <cstring>

#include <cmath>

using namespace std;



int n,x,y;

int dis[200020];







int main(){

	cin>>n>>x>>y;

	

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

		for (int j=1;j<=i;j++){

			dis[min(i-j,abs(x-j)+abs(y-i)+1)] ++;

		}

	}

	

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

		cout<<dis[i]<<endl;

	}

	

	return 0; 

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



#define pb push_back

#define inf INT_MAX

#define pii pair<int,int>

#define f first

#define s second

#define mp make_pair

#define mod 1000000009

#define ld long double

#define eps 1e-8

#define MAXN 2123



vector<pii> are[MAXN];

int dis[MAXN];

int val[MAXN];



void dij(int x){

    for(int i=0;i<MAXN;i++)dis[i]=-1;

    priority_queue<pii> q;

    dis[x]=0;q.push(mp(0,x));

    while(!q.empty()){

        x=q.top().s;int c=-q.top().f;q.pop();

        if(dis[x]!=c)continue;

        for(pii at:are[x]){

            int y=at.s,c=at.f;

            if(dis[y]==-1||dis[x]+c<dis[y]){

                dis[y]=dis[x]+c;

                q.push(mp(-dis[y],y));

            }

        }

    }

    for(int i=0;i<MAXN;i++)val[dis[i]]++;

}



int32_t main (){



    ios::sync_with_stdio(false);

    cin.tie(0);

    cout<<setprecision(2)<<fixed;



    int n,x,y;

    cin>>n>>x>>y;

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

        are[i].pb(mp(1,i+1));

        are[i+1].pb(mp(1,i));

    }

    x--;y--;

    are[x].pb(mp(1,y));

    are[y].pb(mp(1,x));



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



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

        cout<<val[i]/2<<endl;

    }



    return 0;

}




// Faster C++ solution for the same problem (measured speedup: 1.158560506362273x):
#include <iostream>

#include <cstdio>

#include <cstring>

#include <cmath>

using namespace std;



int n,x,y;

int dis[200020];







int main(){

	cin>>n>>x>>y;

	

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

		for (int j=1;j<=i;j++){

			dis[min(i-j,abs(x-j)+abs(y-i)+1)] ++;

		}

	}

	

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

		cout<<dis[i]<<endl;

	}

	

	return 0; 

}
// Slower C++ solution:
#include "bits/stdc++.h"

using namespace std;



#define pb push_back

#define fr(i, n) for(int i = 0; i < n; i++)

#define frr(i, n) for(int i = 1; i <= n; i++)



#define dbg(x) cout << #x << " = " << x << endl

#define all(x) x.begin(),x.end()

#define ms(x, i) memset(x, i, sizeof(x))



#define p(x) cout << x << "\n"

#define pv(x) fr(i, x.size()) cout << x[i] << " \n"[i==x.size()-1]



#define f first

#define s second



#define fastio ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)



typedef long long int ll;

typedef long double ld;

typedef pair<int,int> pii;

typedef pair<ll,ll> pll;

typedef vector<int> vi;

typedef vector<ll> vl;



const int INF = 0x3f3f3f3f;

const ll LINF = 0x3f3f3f3f3f3f3f;



#define maxn 2123



vi adj[maxn];

int ans[maxn], vis[maxn];



int main() {

    fastio;

    int n, x, y;

    cin >> n >> x >> y;



    frr(i, n-1) {

        adj[i].pb(i+1);

        adj[i+1].pb(i);

    }



    adj[x].pb(y);

    adj[y].pb(x);



    frr(i, n) {

        ms(vis, 0);



        queue<pii> q;

        q.push({0, i});

        while (!q.empty()) {

            int u = q.front().s;

            int d = q.front().f;

            q.pop();



            if (vis[u]) continue;

            vis[u] = 1;



            if (u > i) ans[d]++;

            for (auto v: adj[u]) q.push({d+1, v});

        }

    }



    frr(i, n-1) p(ans[i]);

}


// Faster C++ solution for the same problem (measured speedup: 1.1194219275511803x):
//

//  main.cpp

//  D - Line++

//

//  Created by 李远铄 on 2020/7/15.

//  Copyright © 2020 李远铄. All rights reserved.

//



#include <iostream>

#include <vector>

#define DEBUG

#ifdef DEBUG

#define debug(x) cout << #x << ": " << x << "  "<<'\n';

#else

#define debug(x) ;

#endif



using namespace std;

int N;

int X,Y;

vector<int>ans;

int main(int argc, const char * argv[]) {

    scanf("%d %d %d",&N,&X,&Y);

    ans.resize(N);

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

        ans[i]=0;

    }

    for (int i=1; i<=N; i++) {

        for (int j=i+1; j<=N; j++) {

            int len=abs(X-i)+1+abs(j-Y);

            ans[len<j-i?len:j-i]++;

        }

    }

    for (int i=1; i<N; i++) {

        printf("%d\n",ans[i]);

    }

    return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



#define pb push_back

#define inf INT_MAX

#define pii pair<int,int>

#define f first

#define s second

#define mp make_pair

#define mod 1000000009

#define ld long double

#define eps 1e-8

#define MAXN 2123



vector<pii> are[MAXN];

int dis[MAXN];

int val[MAXN];



void dij(int x){

    for(int i=0;i<MAXN;i++)dis[i]=-1;

    priority_queue<pii> q;

    dis[x]=0;q.push(mp(0,x));

    while(!q.empty()){

        x=q.top().s;int c=-q.top().f;q.pop();

        if(dis[x]!=c)continue;

        for(pii at:are[x]){

            int y=at.s,c=at.f;

            if(dis[y]==-1||dis[x]+c<dis[y]){

                dis[y]=dis[x]+c;

                q.push(mp(-dis[y],y));

            }

        }

    }

    for(int i=0;i<MAXN;i++)val[dis[i]]++;

}



int32_t main (){



    ios::sync_with_stdio(false);

    cin.tie(0);

    cout<<setprecision(2)<<fixed;



    int n,x,y;

    cin>>n>>x>>y;

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

        are[i].pb(mp(1,i+1));

        are[i+1].pb(mp(1,i));

    }

    x--;y--;

    are[x].pb(mp(1,y));

    are[y].pb(mp(1,x));



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



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

        cout<<val[i]/2<<endl;

    }



    return 0;

}




// Faster C++ solution for the same problem (measured speedup: 1.1686763845091839x):
//

//  main.cpp

//  D - Line++

//

//  Created by 李远铄 on 2020/7/15.

//  Copyright © 2020 李远铄. All rights reserved.

//



#include <iostream>

#include <vector>

#define DEBUG

#ifdef DEBUG

#define debug(x) cout << #x << ": " << x << "  "<<'\n';

#else

#define debug(x) ;

#endif



using namespace std;

int N;

int X,Y;

vector<int>ans;

int main(int argc, const char * argv[]) {

    scanf("%d %d %d",&N,&X,&Y);

    ans.resize(N);

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

        ans[i]=0;

    }

    for (int i=1; i<=N; i++) {

        for (int j=i+1; j<=N; j++) {

            int len=abs(X-i)+1+abs(j-Y);

            ans[len<j-i?len:j-i]++;

        }

    }

    for (int i=1; i<N; i++) {

        printf("%d\n",ans[i]);

    }

    return 0;

}
// Slower C++ solution:
#include <bits/stdc++.h>

using namespace std;



#define pb push_back

#define inf INT_MAX

#define pii pair<int,int>

#define f first

#define s second

#define mp make_pair

#define mod 1000000009

#define ld long double

#define eps 1e-8

#define MAXN 2123



vector<pii> are[MAXN];

int dis[MAXN];

int val[MAXN];



void dij(int x){

    for(int i=0;i<MAXN;i++)dis[i]=-1;

    priority_queue<pii> q;

    dis[x]=0;q.push(mp(0,x));

    while(!q.empty()){

        x=q.top().s;int c=-q.top().f;q.pop();

        if(dis[x]!=c)continue;

        for(pii at:are[x]){

            int y=at.s,c=at.f;

            if(dis[y]==-1||dis[x]+c<dis[y]){

                dis[y]=dis[x]+c;

                q.push(mp(-dis[y],y));

            }

        }

    }

    for(int i=0;i<MAXN;i++)val[dis[i]]++;

}



int32_t main (){



    ios::sync_with_stdio(false);

    cin.tie(0);

    cout<<setprecision(2)<<fixed;



    int n,x,y;

    cin>>n>>x>>y;

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

        are[i].pb(mp(1,i+1));

        are[i+1].pb(mp(1,i));

    }

    x--;y--;

    are[x].pb(mp(1,y));

    are[y].pb(mp(1,x));



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



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

        cout<<val[i]/2<<endl;

    }



    return 0;

}




// Faster C++ solution for the same problem (measured speedup: 1.1356842852001265x):
#include <bits/stdc++.h>

#define rep(i,n) for (int i = 0; i < (n); ++i)

using namespace std;

using ll = long long;

using P = pair<int,int>;

 

const int INF = 1001001001;

 

int main() {

  int n, x, y;

  cin >> n >> x >> y;

  --x; --y;

  vector<int> ans(n);

  rep(sv,n) {

    vector<int> dist(n, INF);

    queue<int> q;

    auto push = [&](int v, int d) {

      if (dist[v] != INF) return;

      dist[v] = d;

      q.push(v);

    };

    push(sv, 0);

    while (!q.empty()) {

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

      int d = dist[v];

      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);

    }

    rep(i,n) ans[dist[i]]++;

  }

  rep(i,n) ans[i] /= 2;

  for (int i = 1; i <= n-1; ++i) {

    cout << ans[i] << endl;

  }

  return 0;

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MOD=1000000007;

#define INF 1LL<<30

#define rep(i,n) for (int i = 0; i < (n); ++i)

#define all(x) (x).begin(),(x).end()



// ダイクストラ法

// 参照：蟻本　p97

// O(mlogn)

struct edge{int to,cost;};

typedef pair<int,int> P; // firstは最短距離、secondは頂点の番号



int n; // 頂点の数

vector<edge> G[100010];

int d[100010];



void dijkstra(int s){

    priority_queue<P,vector<P>, greater<P>> que;

    fill(d,d+n,INF);

    d[s]=0;

    que.push(P(0,s));



    while(!que.empty()){

        P p=que.top(); que.pop();

        int v=p.second;

        if(d[v]<p.first) continue;

        rep(i,G[v].size()){

            edge e=G[v][i];

            if(d[e.to]>d[v]+e.cost){

                d[e.to]=d[v]+e.cost;

                que.push(P(d[e.to],e.to));

            }

        }

    }

}



int main(){

    int x,y;

    cin >> n>>x>>y;

    x--,y--;

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

        G[i].push_back({i+1,1});

        G[i+1].push_back({i,1});

    }

    G[x].push_back({y,1});

    G[y].push_back({x,1});

    

    map<int,int> m;

    rep(i,n){

        dijkstra(i);

        rep(j,n) m[d[j]]++;

    }



    for(int k=1;k<=n-1;k++){

        cout<<m[k]/2<<endl;

    }

}




// Faster C++ solution for the same problem (measured speedup: 3.5688423680604617x):
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MOD=1000000007;

#define INF 1LL<<30

#define rep(i,n) for (int i = 0; i < (n); ++i)

#define all(x) (x).begin(),(x).end()



int cnt[2010];



int main(){

    int n,x,y;

    cin>>n>>x>>y;



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

        for(int j=i+1;j<=n;j++){

            int tmp=min(j-i,abs(x-i)+1+abs(y-j));

            cnt[tmp]++;

        }

    }



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

        cout<<cnt[i]<<endl;

    }

}
// Slower C++ solution:
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MOD=1000000007;

#define INF 1LL<<30

#define rep(i,n) for (int i = 0; i < (n); ++i)

#define all(x) (x).begin(),(x).end()



// ダイクストラ法

// 参照：蟻本　p97

// O(mlogn)

struct edge{int to,cost;};

typedef pair<int,int> P; // firstは最短距離、secondは頂点の番号



int n; // 頂点の数

vector<edge> G[100010];

int d[100010];



void dijkstra(int s){

    priority_queue<P,vector<P>, greater<P>> que;

    fill(d,d+n,INF);

    d[s]=0;

    que.push(P(0,s));



    while(!que.empty()){

        P p=que.top(); que.pop();

        int v=p.second;

        if(d[v]<p.first) continue;

        rep(i,G[v].size()){

            edge e=G[v][i];

            if(d[e.to]>d[v]+e.cost){

                d[e.to]=d[v]+e.cost;

                que.push(P(d[e.to],e.to));

            }

        }

    }

}



int main(){

    int x,y;

    cin >> n>>x>>y;

    x--,y--;

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

        G[i].push_back({i+1,1});

        G[i+1].push_back({i,1});

    }

    G[x].push_back({y,1});

    G[y].push_back({x,1});

    

    map<int,int> m;

    rep(i,n){

        dijkstra(i);

        rep(j,n) m[d[j]]++;

    }



    for(int k=1;k<=n-1;k++){

        cout<<m[k]/2<<endl;

    }

}




// Faster C++ solution for the same problem (measured speedup: 3.5355161908154686x):
#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MOD=1000000007;

#define INF 1LL<<30

#define rep(i,n) for (int i = 0; i < (n); ++i)

#define all(x) (x).begin(),(x).end()



int main(){

    int n,x,y;

    cin>>n>>x>>y;

    x--,y--;

    if(x>y) swap(x,y);



    vector<int> ans(n,0);



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

        for(int j=i+1;j<n;j++){

            int d=min(j-i,abs(i-x)+1+abs(y-j));

            ans[d]++;

        }

    }



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

        cout<<ans[i]<<endl;

    }

}