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>
#include <vector>
#include <set>
#include <queue>
#include <stack>
#include <string>
#include <sstream>
#include <list>

using namespace std;

int main(int, char**){
    int n;
    cin >> n;
    //vector<int> vec;
    int vec[10];
    for(int as(0);as<n;++as){
	for(int i(0);i<10;++i){
	    int tmp;
	    cin >> tmp;
	    vec[i] = tmp;
	}
	int a(0),b(0);
	for(int i(0);i<10;++i){
	    if(vec[i]<min(a,b)){
		cout << "NO" << endl;
     		goto hai;
     	    }
	    if(a>b) swap(a,b);
	    if(b>vec[i]) a = vec[i];
	    else b = vec[i];
	}
	cout << "YES" << endl;
	hai:;
    }
    //string tmp;
    
    // while(getline(cin,tmp)){
    // 	istringstream is(tmp);
    // 	int m;
    // 	list<int> vec;
    // 	while(is >> m) vec.push_back(m);
    // 	int a(0),b(0);
    // 	for(auto it=begin(vec);it!=end(vec);++it){
    // 	    if(*it>min(a,b)){
    // 		
    // 	    if(a>b){ swap(a,b);}
    // 	    b = *it;
    // 	}
    // 	cout << "YES" <<endl;
    // hai:;
    // 	vec.clear();
    // }
    return 0;
}

C++: #include <bits/stdc++.h>
#define FOR(i, a, b) for(int i=(a); i<(b); i++)
#define REP(i, n) FOR(i, 0, n)
#define all(x) (x).begin(), (x).end()
#define bit(x) (1L << (x))
using ll = long long;
using namespace std;

template<typename T>
vector<T> make_v(size_t a,T b){return vector<T>(a,b);}
 
template<typename... Ts>
auto make_v(size_t a,Ts... ts){
    return vector<decltype(make_v(ts...))>(a,make_v(ts...));
}

bool solve(const auto& balls) {
    const int n = balls.size();
    stack<int> l, r;
    
    function<bool(int)> rec = [&](int i) {
        if (i == n) return true;

        bool pro = false;
        if (l.empty() || l.top() < balls[i]) { // left push
            l.push(balls[i]);
            pro = pro || rec(i + 1);
            l.pop();
        } 

        if (r.empty() || r.top() < balls[i]) { // right push
            r.push(balls[i]);
            pro = pro || rec(i + 1);
            r.pop();
        }

        return pro;
    };

    return rec(0);
}

int main() {
    constexpr int BALLS = 10;
    int n; cin >> n;
    REP(i, n) {
        vector<int> b(BALLS);
        REP(j, BALLS) cin >> b[j];

        if (solve(b)) {
            cout << "YES" << endl;
        } else {
            cout << "NO" << endl;
        }
    }
    return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <string>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int n;
vector<int> v;

void showVector( vector<int> vec ){
  for( int i = 0; i < vec.size(); i++ ) printf("%d: %d, ", i, vec.at(i));
  cout << endl;
}

bool follow( vector<int> v1 ){
  vector<int> v2;
  for(int i=0; i <  v1.size(); i++ ) v2.push_back( v1.at(i) );
  sort( v2.begin(), v2.end() );
  return v1 == v2;
}

bool dfs( int i, vector<int> l, vector<int> r ){
  if( i == 10 ){ 
    return follow(l) && follow(r);
  }

  vector<int> l2 = l;
  l2.push_back( v.at(i) );
  if( dfs( i + 1, l2, r ) ) return true;

  vector<int> r2 = r;
  r2.push_back( v.at(i) );
  if( dfs( i + 1, l, r2 ) ) return true;
  
  return false;
}

main(){
  vector<int> l, r;
  int tmp;
  cin >> n;
  for( int i=0; i < n; i++ ){
    v.clear();
    for( int j = 0; j < 10; j++ ){
      cin >> tmp;
      v.push_back( tmp );
    }
    if( dfs(0, l, r) ) cout << "YES" << endl;
    else cout << "NO" << endl;
  }
}

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

int a[10];
int n;

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

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

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

C++: #include<iostream>
using namespace std;
int main(){
  int b[10];
  int t;
  cin>>t;
  while(t--){
    for(int i=0;i<10;i++)
      cin>>b[i];
    int now=b[0];
    b[0]=0;
    for(int i=1;i<10;i++)
      if(b[i]>now){
	now=b[i];
	b[i]=0;
      }
    /*for(int i=0;i<10;i++)
      cout<<b[i]<<" ";
      cout<<"\n";*/
    for(int i=0;i<10;i++)
      if(b[i]>0){
	now=i;
	break;
      }
    bool flag=true;
    for(int i=now;i<10;i++)
      if(b[i]>0&&b[i]<b[now])
	flag=false;
      else if(b[i]>0)
	now=i;
    if(flag)cout<<"YES\n";
    else cout<<"NO\n";
  }
}

C++: #include<iostream>
using namespace std;
int n;
int a[10], b[10], c[10];
int curB, curC;

bool dfs(int i){
	if(i == 10){
		return true;
	}
	
	if(a[i] > b[curB]){
		b[++curB] = a[i];
		return dfs(i + 1);
	}else if(a[i] > c[curC]){
		c[++curC] = a[i];
		return dfs(i + 1);
	}

	return false;
}

void solve(){
	cin >> n;
	while(n-- > 0){
		for(int i = 0; i < 10; i++){
			cin >> a[i];
			b[i] = c[i] = 0;
		}
		
		curB = 0;
		curC = 0;
		if(dfs(0)){
			cout << "YES" << "\n"; 
		}else{
			cout << "NO" << "\n";
		}
	}
}

int main(){
	solve(); 
}

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

int main(){
	int n, a, b, in, j;
	cin >> n;
	for(int i=0;i<n;i++){
		a = 0;
		b = 0;
		for(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;
			}
		}
		for (int y = j + 1; y < 10; y++) { cin >> in; }
	}
	return 0;
}

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

int main(){
  stack<int> r,l;
  int a,m[10][2],i;
  cin >> a;
  for(int k=0;k<a;k++){
    for(int j=0;j<10;j++)cin>>m[j][0];
    m[0][1]=1;
    i=1;
    r.push(m[0][1]);
    l.push(0);
    while(1){
      if(m[i][0]>r.top()){
	r.push(m[i][0]);
	m[i][1]=1;
	i++;
      }else if(m[i][0]>l.top()){
	l.push(m[i][0]);
	m[i][1]=-1;
	i++;
      }else {
	i--;
	while(1){
	  if(m[i][1]==-1){
	    l.pop();
	    i--;
	  }else{
	    r.pop();
	    m[i][1]=-1;
	    l.push(m[i][0]);
	    i++;
	    break;
	  }
	}
      }
      if(i==10){
	cout<<"YES"<<endl;
	break;
      }else if(i==1){
	cout<<"NO"<<endl;
	break;
      }
    }
  }
  return 0;
}

C++: #include<bits/stdc++.h>
using namespace std;
main(){
  int n,a;
  srand((unsigned)time(NULL));
  cin>>n;
  for(int i=0;i<n;i++){
    for(int j=0;j<10;j++){
      cin>>a;
    }
    if(rand()%2==0){
      cout<<"YES"<<endl;
    }
    else{
      cout<<"NO"<<endl;
    }
  }
}