Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var sc = bufio.NewScanner(os.Stdin)

func main() {
	var num int
	fmt.Scan(&num)

	for i := 0; i < num; i++ {
		sc.Scan()
		line := sc.Text()

		insertCheck(line)
	}
}

func insertCheck(line string) {
	var B, C []int

	for _, v := range strings.Split(line, " ") {
		ball, _ := strconv.Atoi(v)
		switch {
		case len(B) == 0:
			B = append(B, ball)
		case B[len(B)-1] < ball:
			B = append(B, ball)
		case B[len(B)-1] >= ball:
			switch {
			case len(C) == 0:
				C = append(C, ball)
			case C[len(C)-1] < ball:
				C = append(C, ball)
			case C[len(C)-1] >= ball:
				fmt.Println("NO")
				return
			}
		}
	}
	fmt.Println("YES")
}

C++: #include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <set>
#include <utility>
#include <cstdlib>
#include <queue>
#include <stack>
#include <iomanip>
#include <cstdio>
#include <map>

using namespace std;

#define rep(i,x) for(ll i = 0; i < (ll)(x); i++)
#define rrep(i,x) for(ll i = ((ll)(x) - 1); i >= 0; i--)

#define _upgrade ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define all(x) (x).begin(), (x).end()
#define UNIQUE(v) v.erase( unique(v.begin(), v.end()), v.end() );
#define pb push_back

typedef long long int ll;
typedef pair<int,int> P;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<P> vp;

template<class T1, class T2> void chmin(T1 &a, T2 b){if(a>b)a=b;}
template<class T1, class T2> void chmax(T1 &a, T2 b){if(a<b)a=b;}

//ll gcd(ll a, ll b){return b?gcd(b,a%b):a;}
//ll lcm(ll x, ll y) {return x / gcd(x, y) * y;}

int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
const ll LINF = 1001002003004005006ll;
const int INF = 1001001001;
const ll mod = 1e9 + 7;
const double PI = 3.14159265358979323846;


// ****************************************CODE***************************************//





//方針を立てて描かないといけませんね。
//まずは深さ優先探索していくんやけど、各ボールを先頭から調べていきます。
//先頭から見てみて筒に入っている数字より大きかったらその筒に入れます。
//その入れたパターンでdfsを続けます。
//可能かどうかの判定だからすべてを入れることができたらreturn trueでいい感じになるかな。
//他に必要な情報は、すべてを入れることができたかをどう判断するかは、iが最後の数以外入っていてその最後の数がもしどちらかに入るならばyes
//入らないならばreturn false;
//順番的に上から見ていってdfsして帰ってきた値がもしtrueならyesを出してって感じにしたらいいかな？


//このdfsに入っている数はまずは0,0,0を入れるから
//
//
//
//


int n;
vvi ball;

bool dfs(int left, int right, int i, int x){
        if(i == (int)ball[x].size()) return true;

        bool ok = false;
        if(left < ball[x][i]) ok |= dfs(ball[x][i], right,i+1,x);
        if(right < ball[x][i]) ok |= dfs(left,ball[x][i],i+1,x);

        if(ok) return true;
        else return false;
}

int main(){
        cin >> n;
        ball.assign(n,vi(10));
        rep(i,n){
                rep(j,10){
                        cin >> ball[i][j];
                }
                if(dfs(0,0,0,i)) cout << "YES" << endl;
                else cout << "NO" << endl;
        }
}

C++: #include <cstdio>
#include <stack>
using namespace std;

stack<int> b,c;

int main()
{
    int ball,n;
    bool flag = true;
    scanf("%d", &n);
    for(int i=0;i<n;++i) {
        for(int j=0;j<10;++j) {
            scanf("%d", &ball);
            if (b.empty())      { b.push(ball); continue; }
            if (b.top() < ball) { b.push(ball); continue; }
            if (c.empty())      { c.push(ball); continue; }
            if (c.top() < ball) { c.push(ball); continue; }
            else { flag=false; break;}
        }
        (flag) ? puts("YES") : puts("NO");
    }

    return 0;
}

C++: #include<bits/stdc++.h>

using namespace std;

int ball[11] = {0}, B = 0, C = 0;
int c = 0;
bool solve(int x, int y, int z){
	if(x == 10) return true;
	if(ball[x] > y){
		if(solve(x + 1, y = ball[x], z)) return true;
	}
	if(ball[x] > z){
		if(solve(x + 1, y, z = ball[x])) return true;
	}
	else return false;
}

int main(){
	int N;
	int i, j;
	cin >> N;
	for(i = 0; i < N; ++i){
		for(j = 0; j < 10; ++j) cin >> ball[j];
		if(solve(0, B, C)) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
	return 0;
}

C++: #include <iostream>
#include <stack>
using namespace std;

int func( int *ball, int n, int cur, stack<int> b, stack<int> c){
    int ball_cur = ball[cur];
    int count=0;
    
    if(cur == n){
        return 1;
    }    
    if(b.empty() || b.top() < ball_cur ){
        b.push(ball_cur);
        count+=func(ball, n, cur+1, b, c);
        b.pop();
    }
    if(c.empty() || c.top() < ball_cur ){
        c.push(ball_cur);
        count+=func(ball, n, cur+1, b, c);
        c.pop();
    }
    return count;    
}

int main(){
    int n;
    int ball[10];
    stack<int> stk_b,stk_c;
    
    cin>>n;
    for(int i=0;i<n;++i){
        for(int j=0;j<10;++j){
            cin>>ball[j];
        }
        cout << (func(ball, 10, 0, stk_b, stk_c)?"YES":"NO") << endl;
        
    }
    return 0;
}

C++: #include <iostream>
#include <string>
using namespace std;

int main(){
	int n, a, b, in;
	cin >> n;
	for(int i=0;i<n;i++){
		a = 0;
		b = 0;
		for(int j=0;j<10;j++){
			cin >> in;
			if(in>a){
				a = in;
			}
			else if(in>b){
				b = in;
			}
			else{
				cout << "NO" << endl;
				break;
			}
			if (j==9){
				cout << "YES" << endl;
			}
		}
	}
	return 0;
}

C++: #include <iostream>
#include <algorithm>
using namespace std;

int main()
{
    int n;
    cin >> n;

    while (n--) {
        int left = 0, right = 0;
        bool flag = true;
        for (int i = 10; i--;) {
            int x;
            cin >> x;
            if (x > left)
                left = x;
            else if (x > right)
                right = x;
            else {
                flag = false;
                break;
            }
            if (left < right)
                swap(left, right);
        }
        cout << (flag ? "YES" : "NO") << endl;
    }

    return 0;
}

C++: #include <iostream>
using namespace std;

int main(){
	int N;
	int A[11];
	int cnt1=0;
	cin>>N;
	while(1){
		
		if(cnt1==N){
			break;
		}
		cnt1++;
		for(int i=1;i<=10;i++){
			cin>>A[i];
		}
		int B=A[1];
		int Z[11];
		for(int i=1;i<=10;i++){
			Z[i]=0;
		}
		int C=0;
		int cnt2=0;
		int su=0;
		for(int i=2;i<=10;i++){
			if((B+1==A[i])){
				B=A[i];
				cnt2++;
			}
			else if((C+1==A[i])){
				C=A[i];
				cnt2++;
				Z[i]=C;
				su=0;

			}
			else if(B<A[i]){
				B=A[i];
				
				cnt2++;

			}
			else if(C<A[i]){
				C=A[i];
				Z[i]=C;
				su=0;
				cnt2++;
			}
			for(int q=1;q<=10;q++){
				if(B+1==Z[q]){
					su=1;
				}
			}
			
		}
		if(cnt2==9){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;	
}

C++: #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
 
using namespace std;
 
int s[10]={0};
 
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        for(int i=0;i<10;i++)
            scanf("%d",&s[i]);
        int a=0,b=0;
        bool flag=0;
        for(int i=0;i<10;i++)
        {
            if(s[i]<a&&s[i]<b)
            {
                flag=1;
                break;
            }
            else if(s[i]<a&&s[i]>b)b=s[i];
            else if(s[i]>a&&s[i]<b)a=s[i];
            else
            {
                a=a>b?s[i]:a;
                b=a<b?s[i]:b;
                if(a==b)a=s[i];
            }
        }
        if(flag)printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}

C++: #include<cstdio>

using namespace std;

int boal[11];
bool ans;


void BFS(int L,int R,int c){
	
	if(c == 10 || ans){
		ans = true;
		return;
	}
	
	if(L < boal[c]){
		L = boal[c];
		BFS(L,R,c+1);
	}
	if(R < boal[c]){
		R = boal[c];
		BFS(L,R,c+1);
	}
}

int main(void){
	int n;
	while(scanf("%d", &n) != EOF){
		for(int j = 0; j < n; j++){
			ans = false;
			for(int i = 0; i < 10; i++){
				scanf("%d", &boal[i]);
			}
			
			BFS(0,0,0);
			
			printf("%s\n",ans?"YES":"NO");
		}
	}
	return 0;
}