alt

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N =1e6+5;
ll cnt=0;

struct node
{
    ll x,y,z;
};
node s[N];

ll dgcnt(ll x,ll y,ll n,ll m) //次数
{
    if(n==m)
    {
        cnt++;
        return 0;
    }
    else if(n<m)
    {
        cnt++;
        dgcnt(x,y+n,n,m-n);
    }
    else
    {
        cnt++;
        dgcnt(x+m,y,n-m,m);
    }
    return 1;
}

ll dg(ll x,ll y,ll n,ll m)//递归
{
    if(n==m)//1个正方形
    {
        cout<<x<<' '<<y<<' '<<m<<endl;
        return 0;
    }
    else if(n<m)//以m为边长的正方形
    {
        cout<<x<<' '<<y<<' '<<n<<endl;
        dg(x,y+n,n,m-n);
    }
    else//以n为边长的正方形
    {
        cout<<x<<' '<<y<<' '<<m<<endl;
        dg(x+m,y,n-m,m);
    }
    return 1;
}

int main()
{
    ll n,m,t;
    cin>>t;
    while(t--)
    {
        cnt=0;
        cin>>n>>m;
        cout<<"YES"<<endl;
        dgcnt(0,0,n,m);
        cout<<cnt<<endl;
        dg(0,0,n,m);
    }
    return 0;
}