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 <cstdio>
using namespace std;

int main()
{
    int ball[10],index=0;
    for(int i=0;i<10;++i) {
        scanf("%d",&ball[i]);
    }
    while(index+2 <= 9) {
        if(ball[index] < ball[index+1]) {
            ++index;
            continue;
        } else if (ball[index] < ball[index+2]) {
            ++index;
            continue;
        } else {
            puts("NO");
            return -1;
        }
    }
    puts("YES");
    return 0;
}

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

int n,count=0;
int input[10];
bool res;

bool dfs(int x,int ltop,int rtop){
    cout<<x<<","<<ltop<<","<<rtop<<endl;
    if(x==10) return true;
    if(ltop<input[x]){
        if(dfs(x+1,input[x],rtop)) return true;}
    if(rtop<input[x]){
        if(dfs(x+1,ltop,input[x])) return true;}

    return false;
}

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

C++: #include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<queue>
#include<algorithm>

using namespace std;

int t;
int s[15];
int a[15],b[15];
int la,lb;
bool ok;

void DFS(int index){
	if(ok){
		return;
	}
	if(index==10){
		ok=true;
		return;
	}
//	cout<<"a:"<<endl;
//		for(int i=0;i<la;i++){
//			cout<<a[i]<<' ';
//		}
//		cout<<endl;
//	cout<<"b:"<<endl;
//		for(int i=0;i<lb;i++){
//			cout<<b[i]<<' ';
//		}
//		cout<<endl;
	if(la==0||s[index]>a[la-1]){
		a[la++]=s[index];
		DFS(index+1);
		la--;
	}
	if(lb==0||s[index]>b[lb-1]){
		b[lb++]=s[index];
		DFS(index+1);
		lb--;
	}
}

int main(){
	cin>>t;
	while(t--){
		memset(a,0,sizeof(a));
		memset(b,0,sizeof(b));
		la=lb=0;
		ok=false;
		for(int i=0;i<10;i++){
			cin>>s[i];
		}
		DFS(0);
		if(ok){
			cout<<"YES"<<endl;
		}else{
			cout<<"NO"<<endl;
		}
//		for(int i=0;i<la;i++){
//			cout<<a[i]<<' ';
//		}
//		cout<<endl;
//		for(int i=0;i<lb;i++){
//			cout<<b[i]<<' ';
//		}
//		cout<<endl;
	}
	return 0;
}

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

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

C++: #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int a[15],r[15],l[15],lcnt,rcnt,cnt;
bool flag;
bool solve(){
	for(int i=0;i<1024;++i){
		memset(l,0,sizeof(l));
		memset(r,0,sizeof(r));
		lcnt=rcnt=0;
		for(int cnt=0,j=i;cnt<10;cnt++,j>>=1){
			if(j&1)l[lcnt++]=a[cnt];
			else r[rcnt++]=a[cnt];
		}
		flag=true;
		for(int j=1;j<lcnt;j++){
			if(l[j]<l[j-1]){
				flag=false;
				break;
			}
		}
		if(flag){
			for(int j=1;j<rcnt;j++){
				if(r[j]<r[j-1]){
					flag=false;
					break;
				}
			}
		}
		if(flag)return true;//只要能找出就返回true 
	}
	return false;
}
int main(){
	int t;
	cin>>t;
	while(t--){
		for(int i=0;i<10;i++)cin>>a[i];
		puts(solve()?"YES":"NO");
	}
	return 0;
}

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

int ball[10];

bool dfs(int m,int left, int right){
    if(m==10) return true;
    if(ball[m]>left){
        return dfs(m+1,ball[m],right);
    }
    if(ball[m]>right){
        return dfs(m+1,left,ball[m]);
    }
    return false;
}

void solve(){
    for(int i=0;i<10;i++){
        cin>>ball[i];
    }
    if(dfs(0,0,0)){
        cout << "YES" << endl;
    }else{
        cout << "NO" << endl;
    }
}

int main(){
    int n;cin>>n;
    for(int i=0;i<2;i++){
        solve();
    }
    return 0;
}

C++: #include <stdio.h>

int main(){
int n,i,j;
int a,b,c,f;

scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&a);
b=0;
f=0;
for(j=1;j<10;j++){
scanf("%d",&c);
if(a>c&&b>c)f=1;
else if(a<c&&b<c){
if(a>b)a=c;
else b=c;
}
else{
if(a>b)b=c;
else a=c;
}
}
if(f==0){
printf("YES\n");
}
else if(f==1){
printf("NO\n");
}
}
return 0;
}

C++: #include<iostream>
using namespace std;
int d[10]={};
bool f;
void dfs(int l,int r, int s){
  if(s==10) f=true;
  //cout << l << r << d[s] << endl;
  if(l<d[s]){
    dfs(d[s],r,s+1);
  }
  if(r<d[s]){
    dfs(l,d[s],s+1);
  }
}
int main(){
  int n;cin >> n;
  while(n--){
    int r=0,l=0;
    f=false;
    for(int i=0;i<10;i++){
      cin >> d[i];
      //cout << l << ":" << r << endl;
    }
    dfs(0,0,0);
    if(!f) cout << "NO" << endl;
    else cout << "YES" << endl;
  }  
}

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

bool DFS(int t_b,int t_c,int th,int* balls){
  if(th==10)return true;
  if(t_b<balls[th]&&t_c<balls[th])
      if(t_b>t_c)return DFS(balls[th],t_c,th+1,balls);
      else return DFS(t_b,balls[th],th+1,balls);
  else if(t_b<balls[th])return DFS(balls[th],t_c,th+1,balls);
  else if(t_c<balls[th])return DFS(t_b,balls[th],th+1,balls);
  else return false;
}
int main(){
  int n;
  cin>>n;
  for(int j=0;j<n;j++){
    int balls[10];
    for(int i=0;i<10;i++)cin>>balls[i];
    int t_b=0,t_c=0;int drop_balls=0;
    if(DFS(0,0,1,balls))cout<<"YES";
    else cout<<"NO";
    cout<<endl;
  }
}

C++: //dfs
#include<vector>
#include<list>
#include<deque>
#include<queue>
#include<stack>
#include<map>
#include<unordered_map>
#include<set>
#include<unordered_set>
#include<bitset>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cctype>
#include<cmath>
#include<iostream>

using namespace std;
typedef long long ll;
#define cls(x) memset(x,0,sizeof(x))


const int INF = 0x3f3f3f3f;
const int SZ = 100;

int main() {
  int total = 1 << 10;
  int n;
  cin >> n;
  int a[10];
  while(n-- > 0) {
    for(int i = 0; i < 10; ++i) {
      cin >> a[i];
    }
    bool flag;
    for(int p = 0; p < total; ++p) {
      int cur = p;
      int pre_left = -1, pre_right = -1;
      flag = true;
      for(int i = 0; i < 10; ++i) {
        if((cur >> i) & 1) {
          //left
          //cout << a[i] << endl;
          if(a[i] > pre_left) {
            pre_left = a[i];
          } else {
            flag = false;
            break;
          }
        } else {
          // right
          if(a[i] > pre_right) {
            pre_right = a[i];
          } else {
            flag = false;
            break;
          }
        }
      }
      if(flag) break;
    }
    if(flag)  {
      cout << "YES" << endl;
    } else {
      cout << "NO" << endl;
    }
  }
	return 0;
}