#include <bits/stdc++.h>
using namespace std;
const long long N = 3e5 + 10;
long long q, a, b, m[5003], d[5003], t[5003], kq[5003];
bool kt[5003];
void xuli() {
  stack<long long> v;
  long long tam = a, s = 0;
  for (long long i = 1; i <= 12; i++) {
    if (tam >= d[i]) {
      t[i] = d[i];
      tam -= d[i];
      s += i * d[i];
    } else {
      t[i] = tam;
      s += i * tam;
      break;
    }
  }
  for (long long i = 1; i <= 12; i++)
    if ((t[i] - 1) * 2 >= t[i + 1] + 1) {
      v.push(i);
      kt[i] = 1;
    }
  for (long long i = 1; i <= b - s; i++) {
    tam = v.top();
    v.pop();
    t[tam]--;
    t[tam + 1]++;
    if ((t[tam] - 1) * 2 >= t[tam + 1] + 1)
      v.push(tam);
    else
      kt[tam] = 0;
    if (!kt[tam + 1] && (t[tam + 1] - 1) * 2 >= t[tam + 2] + 1) {
      v.push(tam + 1);
      kt[tam + 1] = 1;
    }
    if (tam > 1 && !kt[tam - 1] && (t[tam - 1] - 1) * 2 >= t[tam] + 1) {
      v.push(tam - 1);
      kt[tam - 1] = 1;
    }
  }
  tam = 2;
  long long vt = 0, dem = 0;
  vector<long long> ans, ans1;
  ans.push_back(1);
  for (long long i = 1; i <= a; i++) {
    for (long long j = 1; j <= t[i]; j++) {
      kq[tam] = ans[vt];
      dem++;
      if (dem == 2) {
        dem = 0;
        vt++;
      }
      ans1.push_back(tam);
      tam++;
    }
    ans = ans1;
    ans1.clear();
    vt = 0;
    dem = 0;
  }
  for (long long i = 2; i <= a + 1; i++) cout << kq[i] << ' ';
  cout << '\n';
  for (long long i = 1; i <= a; i++) t[i] = 0;
  for (long long i = 1; i <= a; i++) kt[i] = 0;
}
int main() {
  long long dem = 1;
  for (long long i = 1; i <= 12; i++) d[i] = 1 << i;
  for (long long i = 1; i <= 12; i++) {
    for (long long j = 1; j <= d[i]; j++) {
      m[dem] = m[dem - 1] + i;
      dem++;
      if (m[dem - 1] > 5000) {
        for (long long z = dem; z <= 5000; z++) m[z] = 5001;
        i = 13;
        break;
      }
    }
  }
  cin >> q;
  for (long long z = 1; z <= q; z++) {
    cin >> a >> b;
    a--;
    if (b < m[a] || b > a * (a + 1) / 2) {
      cout << "NO\n";
      continue;
    }
    cout << "YES\n";
    xuli();
  }
}

### Prompt

Please formulate a Cpp solution to the following 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>

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const long long N = 3e5 + 10;
long long q, a, b, m[5003], d[5003], t[5003], kq[5003];
bool kt[5003];
void xuli() {
  stack<long long> v;
  long long tam = a, s = 0;
  for (long long i = 1; i <= 12; i++) {
    if (tam >= d[i]) {
      t[i] = d[i];
      tam -= d[i];
      s += i * d[i];
    } else {
      t[i] = tam;
      s += i * tam;
      break;
    }
  }
  for (long long i = 1; i <= 12; i++)
    if ((t[i] - 1) * 2 >= t[i + 1] + 1) {
      v.push(i);
      kt[i] = 1;
    }
  for (long long i = 1; i <= b - s; i++) {
    tam = v.top();
    v.pop();
    t[tam]--;
    t[tam + 1]++;
    if ((t[tam] - 1) * 2 >= t[tam + 1] + 1)
      v.push(tam);
    else
      kt[tam] = 0;
    if (!kt[tam + 1] && (t[tam + 1] - 1) * 2 >= t[tam + 2] + 1) {
      v.push(tam + 1);
      kt[tam + 1] = 1;
    }
    if (tam > 1 && !kt[tam - 1] && (t[tam - 1] - 1) * 2 >= t[tam] + 1) {
      v.push(tam - 1);
      kt[tam - 1] = 1;
    }
  }
  tam = 2;
  long long vt = 0, dem = 0;
  vector<long long> ans, ans1;
  ans.push_back(1);
  for (long long i = 1; i <= a; i++) {
    for (long long j = 1; j <= t[i]; j++) {
      kq[tam] = ans[vt];
      dem++;
      if (dem == 2) {
        dem = 0;
        vt++;
      }
      ans1.push_back(tam);
      tam++;
    }
    ans = ans1;
    ans1.clear();
    vt = 0;
    dem = 0;
  }
  for (long long i = 2; i <= a + 1; i++) cout << kq[i] << ' ';
  cout << '\n';
  for (long long i = 1; i <= a; i++) t[i] = 0;
  for (long long i = 1; i <= a; i++) kt[i] = 0;
}
int main() {
  long long dem = 1;
  for (long long i = 1; i <= 12; i++) d[i] = 1 << i;
  for (long long i = 1; i <= 12; i++) {
    for (long long j = 1; j <= d[i]; j++) {
      m[dem] = m[dem - 1] + i;
      dem++;
      if (m[dem - 1] > 5000) {
        for (long long z = dem; z <= 5000; z++) m[z] = 5001;
        i = 13;
        break;
      }
    }
  }
  cin >> q;
  for (long long z = 1; z <= q; z++) {
    cin >> a >> b;
    a--;
    if (b < m[a] || b > a * (a + 1) / 2) {
      cout << "NO\n";
      continue;
    }
    cout << "YES\n";
    xuli();
  }
}

```