Problem: You are given two integers n and d. You need to construct a rooted binary tree consisting of n vertices with a root at the vertex 1 and the sum of depths of all vertices equals to d.

A tree is a connected graph without cycles. A rooted tree has a special vertex called the root. A parent of a vertex v is the last different from v vertex on the path from the root to the vertex v. The depth of the vertex v is the length of the path from the root to the vertex v. Children of vertex v are all vertices for which v is the parent. The binary tree is such a tree that no vertex has more than 2 children.

You have to answer t independent test cases.

Input

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

The only line of each test case contains two integers n and d (2 ≤ n, d ≤ 5000) — the number of vertices in the tree and the required sum of depths of all vertices.

It is guaranteed that the sum of n and the sum of d both does not exceed 5000 (∑ n ≤ 5000, ∑ d ≤ 5000).

Output

For each test case, print the answer.

If it is impossible to construct such a tree, print "NO" (without quotes) in the first line. Otherwise, print "{YES}" in the first line. Then print n-1 integers p_2, p_3, ..., p_n in the second line, where p_i is the parent of the vertex i. Note that the sequence of parents you print should describe some binary tree.

Example

Input


3
5 7
10 19
10 18


Output


YES
1 2 1 3 
YES
1 2 3 3 9 9 2 1 6 
NO

Note

Pictures corresponding to the first and the second test cases of the example:

<image>

<image>

Solution (in PYTHON3):

Solution:
#Pye
from os import path
from sys import stdin, stdout
if path.exists('inp.txt'): stdin = open("inp.txt", "r")
maxn = 5005
q = int(stdin.readline())
for _ in range(q):
    n, d = map(int, stdin.readline().split())
    a = [0 for i in range(maxn)]
    b = [0 for i in range(maxn)]
    use = [0 for i in range(maxn)]
    ans = [0 for i in range(maxn)]
    row = [[] for i in range(maxn)]
    left = int((n * (n-1)) / 2) - d
    pos = n
    for i in range(2, n+1): b[i] = 1; a[i] = i-1
    while left and pos >= 2:
        for i in range(1, pos+1):
            if b[i] > 0 and left >= pos - i: left -= pos - i; a[pos] = i - 1; b[i + 1] += 2; b[i] -= 1; break
        pos -= 1
    if left: print("NO")
    else:
        print("YES")
        a = sorted(a[0:(n+1)])
        row[0].append(1)
        for i in range(2, n+1):
            for v in row[a[i]-1]:
                if use[v] < 2: use[v] += 1; ans[i] = v; row[a[i]].append(i); break
        print(*ans[2:(n+1)])