Problem:
Score : 400 points

Problem Statement

We have an undirected graph G with N vertices numbered 1 to N and N edges as follows:

For each i=1,2,...,N-1, there is an edge between Vertex i and Vertex i+1.

There is an edge between Vertex X and Vertex Y.

For each k=1,2,...,N-1, solve the problem below:

Find the number of pairs of integers (i,j) (1 \leq i < j \leq N) such that the shortest distance between Vertex i and Vertex j in G is k.

Constraints

3 \leq N \leq 2 \times 10^3

1 \leq X,Y \leq N

X+1 < Y

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N X Y

Output

For each k=1, 2, ..., N-1 in this order, print a line containing the answer to the problem.

Sample Input 1

5 2 4

Sample Output 1

5
4
1
0

The graph in this input is as follows:

There are five pairs (i,j) (1 \leq i < j \leq N) such that the shortest distance between Vertex i and Vertex j is 1: (1,2)\,,(2,3)\,,(2,4)\,,(3,4)\,,(4,5).

There are four pairs (i,j) (1 \leq i < j \leq N) such that the shortest distance between Vertex i and Vertex j is 2: (1,3)\,,(1,4)\,,(2,5)\,,(3,5).

There is one pair (i,j) (1 \leq i < j \leq N) such that the shortest distance between Vertex i and Vertex j is 3: (1,5).

There are no pairs (i,j) (1 \leq i < j \leq N) such that the shortest distance between Vertex i and Vertex j is 4.

Sample Input 2

3 1 3

Sample Output 2

3
0

The graph in this input is as follows:

Sample Input 3

7 3 7

Sample Output 3

7
8
4
2
0
0

Sample Input 4

10 4 8

Sample Output 4

10
12
10
8
4
1
0
0
0

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for(int i = 0; i < (n); i++)
#define pb push_back
const int maxn = 10000;
const int INF32 = 1'050'000'000;
const long long INF64 = 4'000'000'000'000'000'000;
const int MOD7 = 1'000'000'007;
const int MOD9 = 1'000'000'009;
const int mod = MOD7;

void ERROR(int num) { printf("ERROR%d!\n",num); }
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }
int dx[8]={-1,0,1,0,1,1,-1,-1};
int dy[8]={0,-1,0,1,1,-1,1,-1};


int main(){
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    int N, X, Y;
    cin >> N >> X >> Y;
    X--, Y--;

    vector<vector<int>> G(N);
    rep(i,N) G[i].resize(N);
    rep(i,N-1){
      for(int d = -1; d <= 1; d++){
        int nx = i + d;
        if(d==0 || nx<0 || nx>=N) continue;
        G[i].pb(nx);
      }
    }
    G[X].pb(Y);
    G[Y].pb(X);

    vector<int> ans(N,0);

    rep(i,N){
      vector<int> dis(N+1,-1);
      queue<int> que;

      int s = i;
      dis[s] = 0;
      que.push(s);

      while(!que.empty()){
        int p = que.front();
        que.pop();
        
        rep(j,G[p].size()){
          int nx = G[p][j];
          if(dis[nx]==-1){
            que.push(nx);
            dis[nx] = dis[p]+1;
            //cout << "step: " << dis[p] << endl;
          }
        }
      }

      for(int i=s; i<N; i++){
        int index = dis[i];
        ans[index]++;
        //cout << index << " ";
      }//cout << endl;


    }

    for(int i = 1; i < N; i++){
      cout << ans[i] << endl;
    }
}