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 OCaml (4.02.3) (judge verdict: Wrong Answer)

module IntSet = Set.Make (struct
  type t = int
  let compare = compare
end)

let upper_bound x s =
  match IntSet.split x s with
  | (_, true, _) -> x
  | (s, false, _) -> IntSet.max_elt s

let () = Scanf.scanf "%d %d" @@ fun n k ->
  try
    let (_, abcs) =
      Array.fold_right (fun c (s, abcs) ->
        let a = IntSet.max_elt s in
        let s = IntSet.remove a s in
        (*
         * a + b <= c
         * b <= c - a
         *)
        let b = upper_bound (c - a) s in
        let s = IntSet.remove b s in
        (s, (a, b, c) :: abcs)) (Array.init n (( + ) (k + 2 * n))) @@
        ( IntSet.of_list @@
          Array.to_list @@
          Array.init (2 * n) (( + ) k), [] ) in
    List.iter (fun (a, b, c) -> Printf.printf "%d %d %d\n" a b c) abcs
  with Not_found -> print_endline "-1"