You have an array a_1, a_2, ..., a_n where a_i = i.

In one step, you can choose two indices x and y (x ≠ y) and set a_x = \left⌈ (a_x)/(a_y) \right⌉ (ceiling function).

Your goal is to make array a consist of n - 1 ones and 1 two in no more than n + 5 steps. Note that you don't have to minimize the number of steps.

Input

The first line contains a single integer t (1 ≤ t ≤ 1000) — the number of test cases.

The first and only line of each test case contains the single integer n (3 ≤ n ≤ 2 ⋅ 10^5) — the length of array a.

It's guaranteed that the sum of n over test cases doesn't exceed 2 ⋅ 10^5.

Output

For each test case, print the sequence of operations that will make a as n - 1 ones and 1 two in the following format: firstly, print one integer m (m ≤ n + 5) — the number of operations; next print m pairs of integers x and y (1 ≤ x, y ≤ n; x ≠ y) (x may be greater or less than y) — the indices of the corresponding operation.

It can be proven that for the given constraints it's always possible to find a correct sequence of operations.

Example

Input


2
3
4


Output


2
3 2
3 2
3
3 4
4 2
4 2

Note

In the first test case, you have array a = [1, 2, 3]. For example, you can do the following: 

  1. choose 3, 2: a_3 = \left⌈ (a_3)/(a_2) \right⌉ = 2 and array a = [1, 2, 2]; 
  2. choose 3, 2: a_3 = \left⌈ 2/2 \right⌉ = 1 and array a = [1, 2, 1]. 

You've got array with 2 ones and 1 two in 2 steps.

In the second test case, a = [1, 2, 3, 4]. For example, you can do the following: 

  1. choose 3, 4: a_3 = \left⌈ 3/4 \right⌉ = 1 and array a = [1, 2, 1, 4]; 
  2. choose 4, 2: a_4 = \left⌈ 4/2 \right⌉ = 2 and array a = [1, 2, 1, 2]; 
  3. choose 4, 2: a_4 = \left⌈ 2/2 \right⌉ = 1 and array a = [1, 2, 1, 1]. 
import sys
import os
import math
import copy
from bisect import bisect
from io import BytesIO, IOBase
from math import sqrt,floor,factorial,gcd,log,ceil
from collections import deque,Counter,defaultdict
from itertools import permutations,combinations,accumulate

def Int():               return int(sys.stdin.readline())
def Mint():              return map(int,sys.stdin.readline().split())
def Lstr():              return list(sys.stdin.readline().strip())
def Str():               return sys.stdin.readline().strip()
def Mstr():              return map(str,sys.stdin.readline().strip().split())
def List():              return list(map(int,sys.stdin.readline().split()))
def Hash():              return dict()
def Mod():               return 1000000007
def Mat2x2(n):           return [List() for _ in range(n)]
def Lcm(x,y):            return (x*y)//gcd(x,y)
def dtob(n):             return bin(n).replace("0b","")
def btod(n):             return int(n,2) 
def watch(x):            return print(x)
def common(l1, l2):      return set(l1).intersection(l2)
def Most_frequent(list): return max(set(list), key = list.count)
   
def solution():
     for _ in range(Int()):
          n=Int()
          ans=[]
          while(n>2):
               m=ceil(n**0.5)
               for i in range(m+1,n):
                    ans.append([i,i+1])
               ans.append([n,m])
               ans.append([n,m])
               n=m
          print(len(ans))     
          for i in ans:
               print(i[0],i[1])     
          
if __name__ == "__main__":
     solution()