
#include<stdio.h>

//探索再帰関数
bool tansaku(int count,int ans[],int a_max,int b_max,bool flg)
{
	//カウントが１０なら終了
	if (count == 10)
	{
		return true;
	}
	//trueじゃないなら探索を続ける
	if (flg == false)
	{
		//aの最大より新しいやつの方が大きいとき
		if (a_max < ans[count])
		{
			//aの上に格納
			a_max = ans[count];
			//答え配列のカウント変数をインクリメント
			count++;
			//再帰関数からの戻り値を格納
			bool hozon = tansaku(count,ans,a_max,b_max,flg);
			//trueを消さないように
			if (hozon == true)
			{
				flg = true;
			}
		}
		//bの最大より大きいとき
		if (b_max < ans[count])
		{
			//bに入力配列[count]を格納
			b_max = ans[count];
			count++;
			bool hozon = tansaku(count,ans,a_max,b_max,flg);
			if (hozon == true)
			{
				flg = true;
			}
		}
	}
	return flg;
}
int main(void)
{
	//回数を指定する変数
	int N = 0;
	//入力配列
	int a[10] = {0};
	//まとめて解答するflg
	bool ans_flg[100] = {false};
	scanf("%d",&N);
	for (int i = 0;i < N;i++)
	{
		//１０個のボールの入力
		scanf("%d %d %d %d %d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
		//count = 0、入力配列、a_max = 0,b_max = 0,flg = falseを送る
		if (tansaku(0,a,0,0,false) == true)
		{
			ans_flg[i] = true;
		}
	}
	//N回文の解答を出力
	for (int i = 0;i < N;i++)
	{
		if (ans_flg[i] == true)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}