import std.stdio, std.string, std.conv;
import std.typecons;
import std.algorithm, std.array, std.range, std.container;
import std.math;

void main() {
    auto input = readln.split.to!(int[]);
    auto N = input[0], X = input[1], Y = input[2];
    int[] ans; ans.length = N+1;
    
    foreach (k; 1 .. N+1) {
        ans[k] = N-k;
    }
    //writeln(ans);
    // i <= X and Y <= j
    foreach (k; Y-X .. N+1) {
        int diff1;
        if (Y-k <= 0)
            diff1 = min(X, N-k);
        else if (X+k >= N+1)
            diff1 = N - max(1, Y) + 1;
        else
            diff1 = (X+k) - Y + 1;
        
        ans[k] -= diff1;
        ans[k - (Y-X-1)] += diff1;
    }
    //writeln(ans);
    // X < i < Y <= j
    foreach (i; X+1 .. (X+Y)/2) {
        foreach (j; Y .. N+1) {
            writeln(i, " ", j, 1 + i-X + j-Y < j-i);
            if (1 + i-X + j-Y < j-i) ans[j-i]--, ans[1 + i-X + j-Y]++;
        }
    }
    
    // i <= X < j < Y
    foreach (j; (X+Y)/2+1 .. Y) {
        foreach (i; 1 .. X+1) {
            writeln(i, " ", j, 1 + X-i + Y-j < j-i);
            if (1 + X-i + Y-j < j-i) ans[j-i]--, ans[1 + X-i + Y-j]++;
        }
    }
    
    // X < i < j < Y
    foreach (i; X+1 .. Y-1) foreach (j; X+2 .. Y) {
        writeln(i, " ", j, 2*(j-i) >= Y-X+1);
        if (2*(j-i) >= Y-X+1) { ans[j-i]--; ans[Y-j + i-X + 1]++; }
    }
    
    foreach (k; 1 .. N) {
        writeln(ans[k]);
    }
}