#include<iostream>
#include<string>
using namespace std;
int flag=1;
typedef struct node
{
int W1,D1,Wr,Dr;
struct node *left,*right;
}bitnode,*bitree;
void createtree(bitree *T)
{
bitnode bit;
cin>>bit.W1>>bit.D1>>bit.Wr>>bit.Dr;
*T=new node;
(*T)->D1=bit.D1;
(*T)->Dr=bit.Dr;
(*T)->W1=bit.W1;
(*T)->Wr=bit.Wr;
if(bit.W1&&bit.Wr)
{
(*T)->left=NULL;
(*T)->right=NULL;
}
else
{
if(bit.W1&&!bit.Wr)
{
(*T)->left=NULL;
createtree(&((*T)->right));
}
if(bit.Wr&&!bit.W1)
{
(*T)->right=NULL;
createtree(&((*T)->left));
}
if(!bit.Wr&&!bit.W1)
{
createtree(&((*T)->left));
createtree(&((*T)->right));
}
}
}
void dfs(bitree T,int *sum)
{
if(T)
{
*sum+=T->W1+T->Wr;
dfs(T->left,sum);
dfs(T->right,sum);
}
}
void is_yes(bitree T)
{
if(T)
{
int x=0,y=0;
int sum_x=0,sum_y=0;
int *sum_xp=&sum_x,*sum_yp=&sum_y;
if(!T->left)
sum_x=T->W1;
else
dfs(T->left,sum_xp);
if(!T->right)
sum_y=T->Wr;
else
dfs(T->right,sum_yp);
x=(T->D1)*sum_x;
y=(T->Dr)*sum_y;
if(x!=y)
{
flag=0;
return ;
}
is_yes(T->left);
is_yes(T->right);
}
}
int main()
{
int sum;
cin>>sum;
while(sum--)
{
flag=1;
bitree T;
T=NULL;
createtree(&T);
is_yes(T);
if(flag==0)
cout<<"NO"<<endl;
else
cout<<"YES"<<endl;
if(sum)cout<<endl;
}
return 0;
}