Problem:
Score : 700 points

Problem Statement

Given are positive integers N and K.

Determine if the 3N integers K, K+1, ..., K+3N-1 can be partitioned into N triples (a_1,b_1,c_1), ..., (a_N,b_N,c_N) so that the condition below is satisfied. Any of the integers K, K+1, ..., K+3N-1 must appear in exactly one of those triples.

For every integer i from 1 to N, a_i + b_i \leq c_i holds.

If the answer is yes, construct one such partition.

Constraints

1 \leq N \leq 10^5

1 \leq K \leq 10^9

Input

Input is given from Standard Input in the following format:

N K

Output

If it is impossible to partition the integers satisfying the condition, print -1. If it is possible, print N triples in the following format:

a_1 b_1 c_1
:
a_N b_N c_N

Sample Input 1

1 1

Sample Output 1

1 2 3

Sample Input 2

3 3

Sample Output 2

-1

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

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)
typedef long long ll;
typedef pair<ll, ll> P;
int main(){
    ll n;
    ll k;
    cin >> n >> k;
    vector<ll> a(n),b(n),c(n);
    vector<P> ans(n);
    rep(i,n){
        c[i] = 2*n+k+i;
        a[i] = k+i;
        b[i] = 2*n+k-i-1;
    }
    vector<bool>fin(n);
    int j = 1;
    rep(i,n){
        if(i+j<n && fin[i]==false&&fin[i+j]==false){
            swap(a[i],a[i+j]);
            fin[i]=true;
            fin[i+j]=true;
            j++;
        }
        ans[i] = P(a[i]+b[i],a[i]);
    }
    sort(ans.begin(),ans.end());
    rep(i,n){
        if(c[i]<ans[i].first){
            cout << "-1" << endl;
            return 0;
        }
    }
    rep(i,n){
        cout << ans[i].second << ' ' << ans[i].first-ans[i].second <<' ' << c[i]<<endl;
    }
    return 0;
}