#include <cstdio>
#include <algorithm>
#include <queue>
#include <string>
#include <cstring>
#include <stack>
#include <vector>
#include <set>
#include <cmath>
#include <map> 
#include <iostream>
#include <cctype>
#include <utility> // 包含pair 
using namespace std;
typedef long long LL;
const int MAXN = 10 + 10;
int a[MAXN];
stack<int> s1, s2; // 建立两个栈，用于模拟小球进栈的过程
// 当前第idx个元素 
bool dfs(int idx) {
	if (idx == 10) {
		return true; // 所有元素都遍历完了(思考这里是true还是false) 应该是true 
	}
	if (s1.empty() || a[idx] > s1.top()) {
		s1.push(a[idx]);
		if (dfs(idx + 1)) {
			s1.pop(); // 回溯
			return true; 
		}
	}
	if (s2.empty() || a[idx] > s2.top()) {
		s2.push(a[idx]);
		if (dfs(idx + 1)) {
			s2.pop();
			return true;
		}
	}
	return false; // 都不满足则返回假 
}

int main() {
	// ios::sync_with_stdio(false);
	int T;
	scanf("%d", &T);
	while (T--) {
		// while (!s1.empty()) s1.pop();
		// while (!s2.empty()) s2.pop(); 如果是回溯法的话，其实不需要这两行 
		for (int i = 0; i < 10; i++) {
			scanf("%d", &a[i]);
		}
		if (dfs(0)) printf("YES\n");
		else printf("NO\n");
	}
	
    return 0;
}
