#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

// 2つのベクターに玉を振り分ける
// 振り分け方は以下のパターンを考える。
// 2つとも空
// 1つ目のベクターに詰める
// 1つが空
// 後に小さい数字の玉が続く場合は詰まっているほうにいれる
// 詰まっているほうに入らなければ結果はNO
// 両方に玉が入っている場合、
// より大きい玉が入っているほうを優先して詰めていく

int main() {
	int n;
	cin >> n;
	for (int i = 0; i < n; ++i) {
		int ball[10];
		for (int& a : ball) {
			cin >> a;
		}
		vector<int> vec[2];
		for (int a : ball) {
			// stk[0]が空のときは両方とも空
			if (vec[0].empty()) {
				vec[0].push_back(a);
			}
			else if (vec[1].empty()) {
				auto it = find_if((&a) + 1, end(ball), [a](int x) {return a > x;});
				if (it == end(ball)) {
					if (vec[0].back() < a) {
						vec[0].push_back(a);
					}
					else {
						// 後続に小さい球があり、詰まっているほうに入れられないのでNO
						break;
					}
				}
				else {
					// 後続に小さい球がない場合、空きに入れる。
					vec[1].push_back(a);
				}

			}
			else {
				if (a > vec[0].back() && a > vec[1].back()) {
					// どちらにも入れられる場合、大きいほうに入れる
					if (vec[0].back() > vec[1].back()) {
						vec[0].push_back(a);
					}
					else {
						vec[1].push_back(a);
					}
				}
				else if (a < vec[0].back() && a < vec[1].back()) {
					// 両方より大きい場合、結果はNO
					break;
				}
				else if (a > vec[0].back()) {
					vec[0].push_back(a);
				}
				else {
					vec[1].push_back(a);
				}
			}
		}
		if (vec[0].size() + vec[1].size() == 10) {
			cout << "YES" << endl;
		}
		else {
			cout << "NO" << endl;
		}
	}
	return 0;
}