Go: package main

import "fmt"

func isOrdered(a []int) bool {
	if len(a) <= 1 {
		return true
	}
	for i := 0; i+1 < len(a); i++ {
		if a[i] > a[i+1] {
			return false
		}
	}
	return true
}

func main() {
	// ボールの数がせいぜい10個しかないので、全てのボールの落とし方を全探索することが可能
	// Bit全探索を行う。右から見てj番目のビットが立っているときには左側の筒、立っていない時は右側の筒にいれる物とする。
	// 全てのボールを落とし終わった後に、それぞれの筒で昇順に並んでいるか調べることにする。
	var t int
	fmt.Scan(&t)
	ans := make([]bool, t)
	for i := 0; i < t; i++ {
		balls := make([]int, 10)
		for i := range balls {
			fmt.Scan(&balls[i])
		}
		ans[i] = false
		for bits := 0; bits < (1 << uint(10)); bits++ {
			pipeB := make([]int, 0)
			pipeC := make([]int, 0)
			for j := 0; j < 10; j++ {
				if (bits & (1 << uint(j))) != 0 {
					pipeB = append(pipeB, balls[j])
				} else {
					pipeC = append(pipeC, balls[j])
				}
			}
			if isOrdered(pipeB) && isOrdered(pipeC) {
				// fmt.Printf("test case %d - OK pattern - pipeB %v, pipec %v\n", i, pipeB, pipeC)
				ans[i] = true
				break
			}
		}
	}
	for i := range ans {
		if ans[i] {
			fmt.Println("YES")
		} else {
			fmt.Println("NO")
		}
	}
}

C++: #include <iostream>

using namespace std;

//Aoj 0033

int ball[15], l[15],r[15];

bool res= false;

void dfs(int i,int j,int k){//i 为当年需要落下的球,j 表示左边最上面球的上一位置，k 表示最右边球的上一位置
    if(i>=10){
        res=true;
        return;
    }
//    if(res){
//        return;
//    }
    if(ball[i]>l[j-1]){
        l[j]=ball[i];
        dfs(i+1,j+1,k);
    }
    if(ball[i]>r[k-1]){
        r[k]=ball[i];
        dfs(i+1,j,k+1);
    }

}

int main(){
    int n;
    cin>>n;
    while(n--){
        res= false;
        for(int i=0;i<10;i++){
            cin>>ball[i];
        }
        dfs(0,1,1);
        if(res){
            cout<<"YES"<<endl;
        }else{
            cout<<"NO"<<endl;
        }

    }
    return 0;
}

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

#define MAX 10	// ÊÌ

int main()
{
	int A, B, C;
	int n;
	int i, j;
	int flag;

	cin>>n;
	for (i = 0; i < n; i++) {
		B = C = 0;
		flag = 1;
		for (j = 0; j < MAX; j++) {
			cin>>A;

			if (B < A) {
				B = A;
			} else if (C < A) {
				C = A;
			} else {
				flag = 0;
				break;
			}
		}
		if (flag) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}

	return 0;
}

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

int main(){
    int n;
    cin>>n;
    while(n--){
        vector<int>vec;
        for(int i=0;i<10;i++){
            int t;
            cin>>t;
            vec.push_back(t);
        }
        for(int i=0;i<1<<10;i++){
            vector<int>a,b;
            for(int j=0;j<10;j++){
                if((i>>j)&1){
                    a.push_back(vec[j]);
                }
                else{
                    b.push_back(vec[j]);
                }
            }
            int suc=1;
            if(a.size()>1)
                for(int j=0;j<a.size()-1;j++){
                    if(a[j+1]<a[j])
                        suc=0;
                }
            if(b.size()>1)
                for(int j=0;j<b.size()-1;j++){
                    if(b[j+1]<b[j])
                        suc=0;
                }
            if(suc==1){
                cout<<"YES"<<endl;
                goto next;
            }
            a.clear();
            b.clear();
        }
        cout<<"NO"<<endl;
    next:;
    }
    return 0;
}

C++: #include <cstdio>

const int BALL_NUMBER = 10;
bool state[1];

void back_track(int* list, int n_ptr,int left_top, int right_top) {
	// print
	//printf("ptr=%d, left=%d, right=%d\n", n_ptr, left_top, right_top);
	// find solution
	if (n_ptr == BALL_NUMBER) {
		state[0] = true;
		return;
	}
	// is ever found solution
	if (state[0]) {
		return;
	}
	// do left pattern
	if (list[n_ptr] > left_top)
		back_track(list, n_ptr + 1, list[n_ptr], right_top);
	// do right pattern
	if (list[n_ptr] > right_top)
		back_track(list, n_ptr + 1, left_top, list[n_ptr]);
	return;
}

int main(int argc, char *argv[]) {
	int dataN;
	fscanf(stdin, "%d", &dataN);
	
	for (int i = 0; i < dataN; i++) {
		int ball[10];
		state[0] = false;
		for (int j = 0; j < BALL_NUMBER; j++) {
			fscanf(stdin, "%d", &ball[j]);
		}
		// search
		back_track(ball, 0, -1, -1);
		// print result
		if (state[0])
			puts("YES");
		else
			puts("NO");
	}
	return 0;
}

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

int Balls[10];

bool dfs(int i, int R, int L)
{
	if(i == 10) return true;

	if(dfs(i+1, Balls[i], L) && Balls[i] > R) return true;

	if(dfs(i+1, R, Balls[i]) && Balls[i] > L) return true;

	return false;
}

int main()
{
	int n;

	cin >> n;
	for(int i=0; i<n; i++){
		for(int j=0; j<10; j++)
			cin >> Balls[j];

		if(dfs(0, 0, 0)) cout << "YES\n";
		else cout << "NO\n";
	}

	return 0;
}

C++: #include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define RG register int
#define rep(i,a,b)	for(RG i=a;i<=b;++i)
#define per(i,a,b)	for(RG i=a;i>=b;--i)
#define ll long long
#define inf (1<<29)
using namespace std;
int T,n=10,flg;
int num[15],rec[15],a[15],b[15];
inline int read()
{
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*f;
}

void judge()
{
	int la=0,lb=0;
	rep(i,1,n)	if(rec[i]==1)	a[++la]=num[i];
				else			b[++lb]=num[i];
	rep(i,2,la)	if(a[i-1]>a[i])	return;
	rep(i,2,lb)	if(b[i-1]>b[i])	return;
	flg=1;return;
}

void dfs(int step)
{
	if(flg)	return;
	if(step>n){judge();return;}
	rec[step]=1;dfs(step+1);
	rec[step]=0;dfs(step+1);
}

int main()
{
	T=read();
	while(T--)
	{
		rep(i,1,n)	num[i]=read();
		flg=0;
		dfs(1);
		puts(!flg?"NO":"YES");
	}
	return 0;
}

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

bool hoge(int a[], int i, int left, int right)
{
    if (i==10)
        return true;
    if (left < a[i])
        if (hoge(a, i+1, a[i], right))
            return true;
    if (right < a[i])
        if (hoge(a, i+1, left, a[i]))
            return true;
    return false;
}

int main(void) {
    int n, a[10];
    cin >> n;
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < 10; ++j)
            cin >> a[j];
        cout << ((hoge(a, 0, 0, 0))? "YES" : "NO") << endl;
    }
    return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;

int main()
{
	int n;
	cin >> n;
	while (n--) {
		int a[10];
		for (int i = 0; i < 10; i++) {
			cin >> a[i];
		}
		bool res = false;
		for (int i = 0; i < (1 << 10); i++) {
			bool flag = true;
			int am = 0, bm = 0;
			for (int j = 0; j < 10; j++) {
				if (i & (1 << j)) {
					if (a[j] > am) {
						am = a[j];
					}
					else {
						flag = false;
						break;
					}
				}
				else {
					if (a[j] > bm) {
						bm = a[j];
					}
					else {
						flag = false;
						break;
					}
				}
			}
			if (flag) {
				res = true;
			}
		}
		cout << (res ? "YES" : "NO") << endl;
	}
	return 0;
}