Fake Plastic Trees

서브트리를 재사용해 125개 이하의 균형 이진 트리를 만들고, 노드가 정확히 N개인 트리 하나를 포함하는 구성을 출력합니다.

어려움8트리수학그리디구현아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

Tree is a recursive structure, which is either:

  • Empty. Empty tree is denoted as 1-1 and has a size of 0.
  • Non-empty. Non-empty tree TT is denoted as a pair of two trees (T_1, T_2)(T\_1,\ T\_2), where T_1T\_1 is called left subtree of TT, and T_2T\_2 is called right subtree of TT. If T=(1, 1)T = (-1,\ -1), then we call such TT a leaf. Leaf has a size of 1, and non-leaf has a size of T_1+T_2|T\_1| + |T\_2|, where T_1|T\_1| is the size of T_1T\_1, and T_2|T\_2| is the size of T_2T\_2.

A non-empty tree TT is a Fake Plastic Tree, if the tree is balanced. Formally, Let T=(T_1, T_2)T = (T\_1,\ T\_2). If T_1=T_2|T\_1| = |T\_2| or T_1=T_2+1|T\_1| = |T\_2| + 1 holds, then TT is a Fake Plastic Tree.

In computer science, trees are commonly used as a data structure, and they are stored in a memory. At first, there are no trees in the memory, and only an imaginary null pointer exists (which corresponds to empty tree, 1-1). You can allocate a tree in the memory, by setting T_1T\_1 and T_2T\_2 as either a null pointer or a pointer of an existing tree. Then, the memory is extended by adding T=(T_1, T_2)T = (T\_1,\ T\_2) into its structure. Note that pointer can be described as a small integer, reducing the need for explicitly storing the whole tree.

Formally, memory MM is an inductive structure, which at first contains only empty tree 1-1. (M=1M = \\{-1\\}). You can expand the memory with following operation MM(T_1, T_2)M \leftarrow M \cup \\{(T\_1,\ T\_2)\\}, where T_1M, T_2MT\_1 \in M,\ T\_2 \in M. If a tree TT is inserted in ii-th stage, then it has the index i1i-1. For a tree with index ii, their subtrees can be represented as a pair of integer in range \[1, i1]\[-1,\ i-1].

Your task is to construct a memory MM, which satisfies the following:

  • Every tree in MM is either empty or Fake Plastic Tree.
  • MM has at most 125 non-empty trees.
  • There exists a tree TMT \in M, where T=N|T| = N holds. NN is an integer, and is given as an input.

입력

The first line contains a single integer TT, the number of test cases. (1T2,0001 \leq T \leq 2,000)

In the next TT lines, a single integer NN is given, which indicates the number of leaves your tree should contain. (1N10181 \leq N \leq 10^{18})

출력

For each case, you should print V+2V + 2 lines, where VV is the number of non-empty trees in MM. (1V1251 \leq V \leq 125).

In the first line, you should print single integer VV.

In the next VV lines, you should print two space-separated integer L_i, R_iL\_i,\ R\_i, which indicates the index of left subtree and right subtree for a tree with index ii. (1L_i, R_ii1-1 \leq L\_i,\ R\_i \leq i - 1).

In the (V+2)(V+2)-th line, you should print PP, the index of the tree which contains NN nodes. (0PV10 \leq P \leq V-1).

It is guaranteed that an answer always exists under the given condition.