/*
1.红结点是负数
2.红结点的孩子结点一定是黑结点
3.任一结点到其每个叶子结点的所有路径包含的黑结点个数相同
*/
#include<iostream>
#include<math.h>
using namespace std;
struct node{
int val;
struct node *left,*right;
};
void insert(node* &root,int num){
if(root==NULL){
root=new node();
root->val=num;
root->left=root->right=NULL;
}else if(abs(root->val)>abs(num))
insert(root->left,num);
else insert(root->right,num);
}
bool judge1(node* root){
if(root==NULL) return true;
else if(root->val<0){
if(root->left!=NULL&&root->left->val<0) return false;
if(root->right!=NULL&&root->right->val<0) return false;
}
return judge1(root->left)&&judge1(root->right);
}
int getNum(node* root){
if(root==NULL) return 0;
if(root->val>0) return max(getNum(root->left),getNum(root->right))+1;
if(root->val<0) return max(getNum(root->left),getNum(root->right));
}
bool judge2(node* root){
if(root==NULL) return true;
int l=getNum(root->left);
int r=getNum(root->right);
if(l!=r)
return false;
else return judge2(root->left)&&judge2(root->right);
}
int main(){
int K,N,num;
scanf("%d",&K);
for(int i=0;i<K;i++){
scanf("%d",&N);
node* root=NULL;
for(int j=0;j<N;j++){
scanf("%d",&num);
insert(root,num);
}
if(root->val<0||!judge1(root)||!judge2(root)) printf("No\n");
else printf("Yes\n");
}
return 0;
}