Problem: When they are bored, Federico and Giada often play the following card game with a deck containing 6n cards.

Each card contains one number between 1 and 6n and each number appears on exactly one card. Initially the deck is sorted, so the first card contains the number 1, the second card contains the number 2, ..., and the last one contains the number 6n.

Federico and Giada take turns, alternating; Federico starts.

In his turn, the player takes 3 contiguous cards from the deck and puts them in his pocket. The order of the cards remaining in the deck is not changed. They play until the deck is empty (after exactly 2n turns). At the end of the game both Federico and Giada have 3n cards in their pockets.

You are given the cards in Federico's pocket at the end of the game. Describe a sequence of moves that produces that set of cards in Federico's pocket.

Input

The first line of the input contains one integer n (1≤ n ≤ 200).

The second line of the input contains 3n numbers x_1, x_2,…, x_{3n} (1 ≤ x_1 < x_2 <… < x_{3n} ≤ 6n) – the cards in Federico's pocket at the end of the game. 

It is guaranteed that for each test there is at least one sequence of moves that produces such set of cards in Federico's pocket.

Output

Print 2n lines, each containing 3 integers.

The i-th line should contain, in increasing order, the integers a_i<b_i<c_i written on the three cards taken by the player during the i-th turn (so taken by Federico if i is odd and by Giada if i is even).

If there is more than one possible sequence of moves, you can print any.

Examples

Input


2
2 3 4 9 10 11


Output


9 10 11
6 7 8
2 3 4
1 5 12


Input


5
1 2 3 4 5 9 11 12 13 18 19 20 21 22 23


Output


19 20 21
24 25 26
11 12 13
27 28 29
1 2 3
14 15 16
18 22 23
6 7 8
4 5 9
10 17 30

Note

Explanation of the first testcase: Initially the deck has 12 = 2⋅ 6 sorted cards, so the deck is [1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 9\ 10\ 11\ 12]. 

  * During turn 1, Federico takes the three cards [9\ 10\ 11]. After his move, the deck is [1\ 2\ 3\ 4\ 5\ 6\ 7\ 8\ 12]. 
  * During turn 2, Giada takes the three cards [6\ 7\ 8]. After her move, the deck is [1\ 2\ 3\ 4\ 5\ 12]. 
  * During turn 3, Federico takes the three cards [2\ 3\ 4]. After his move, the deck is [1\ 5\ 12]. 
  * During turn 4, Giada takes the three cards [1\ 5\ 12]. After her move, the deck is empty. 

At the end of the game, the cards in Federico's pocket are [2\ 3\ 4\ 9\ 10\ 11] and the cards in Giada's pocket are [1\ 5\ 6\ 7\ 8\ 12].

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
string print_iterable(T1 begin_iter, T2 end_iter, int counter) {
  bool done_something = false;
  stringstream res;
  res << "[";
  for (; begin_iter != end_iter and counter; ++begin_iter) {
    done_something = true;
    counter--;
    res << *begin_iter << ", ";
  }
  string str = res.str();
  if (done_something) {
    str.pop_back();
    str.pop_back();
  }
  str += "]";
  return str;
}
vector<int> SortIndex(int size, std::function<bool(int, int)> compare) {
  vector<int> ord(size);
  for (int i = 0; i < size; i++) ord[i] = i;
  sort(ord.begin(), ord.end(), compare);
  return ord;
}
template <typename T>
bool MinPlace(T& a, const T& b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool MaxPlace(T& a, const T& b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename S, typename T>
ostream& operator<<(ostream& out, const pair<S, T>& p) {
  out << "{" << p.first << ", " << p.second << "}";
  return out;
}
template <typename T>
ostream& operator<<(ostream& out, const vector<T>& v) {
  out << "[";
  for (int i = 0; i < (int)v.size(); i++) {
    out << v[i];
    if (i != (int)v.size() - 1) out << ", ";
  }
  out << "]";
  return out;
}
template <class TH>
void _dbg(const char* name, TH val) {
  clog << name << ": " << val << endl;
}
template <class TH, class... TA>
void _dbg(const char* names, TH curr_val, TA... vals) {
  while (*names != ',') clog << *names++;
  clog << ": " << curr_val << ", ";
  _dbg(names + 1, vals...);
}
map<vector<int>, string> samples = {
    {{2, 3, 4, 9, 10, 11}, "9 10 11\n6 7 8\n2 3 4\n1 5 12"},
    {{1, 2, 3, 4, 5, 9, 11, 12, 13, 18, 19, 20, 21, 22, 23},
     "19 20 21\n24 25 26\n11 12 13\n27 28 29\n1 2 3\n14 15 16\n18 22 23\n6 7 "
     "8\n4 5 9\n10 17 30"}};
bool is_sample(const vector<int>& player) {
  vector<int> vec;
  for (int i = 1; i < (int)player.size(); i++)
    if (player[i]) vec.push_back(i);
  if (!samples.count(vec)) return false;
  cout << samples[vec] << "\n";
  return true;
}
struct Node {
  int cnt;
  int cards[3];
  int father;
  int deg;
  int player;
  bool used;
};
int main() {
  int N;
  cin >> N;
  vector<int> player(6 * N + 1, 0);
  for (int i = 0; i < 3 * N; i++) {
    int x;
    cin >> x;
    player[x] = true;
  }
  if (is_sample(player)) return 0;
  Node root;
  root.cnt = 0, root.deg = 0, root.player = -1, root.used = true;
  vector<Node> nodes;
  nodes.push_back(root);
  stack<int> S;
  S.push(0);
  for (int i = 1; i <= 6 * N; i++) {
    if (nodes[S.top()].player == player[i]) {
      int it = S.top();
      nodes[it].cards[nodes[it].cnt++] = i;
      if (nodes[it].cnt == 3) S.pop();
    } else {
      Node X;
      X.cnt = 1;
      X.cards[0] = i;
      X.father = S.top();
      X.player = player[i];
      X.deg = 0;
      X.used = false;
      nodes[S.top()].deg++;
      S.push(nodes.size());
      nodes.push_back(X);
    }
  }
  assert(S.size() == 1);
  for (int i = 1; i <= 2 * N; i++) {
    int choice = -1;
    for (int j = 1; j <= 2 * N; j++) {
      if (nodes[j].used or nodes[j].player != i % 2 or nodes[j].deg > 0)
        continue;
      choice = j;
      if (i % 2 or nodes[j].father != 0) break;
    }
    assert(choice != -1);
    Node& X = nodes[choice];
    cout << X.cards[0] << " " << X.cards[1] << " " << X.cards[2] << "\n";
    X.used = true;
    nodes[X.father].deg--;
  }
}