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

int n;
int a[10];


bool dfs(int i, int left, int right) {
    if (i == 9) return a[i] > left || a[i] > right;
    if (a[i] > left && dfs(i+1, a[i], right)) return true;
    if (a[i] > right && dfs(i+1, left, a[i])) return true;
    return false;
}

void solve() {
    if (dfs(0,0,0)) cout << "YES" << endl;
    else cout << "NO" << endl;
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < 10; j++) {
            cin >> a[j];
        }
        solve();
    }
}

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

int main() {
  int n;
  cin >> n;
  while (n--) {
    int a, b = 0, c = 0;
    bool f = true;
    for (int i = 0; i < 10; i++) {
      cin >> a;
      if (b < a) b = a;
      else if (c < a) c = a;
      else f = false;
    }
    cout << (f ? "YES\n" : "NO\n");
  }
}

C++: //#include <iostream>
//#include <cstdio>
//#include <iomanip>
//#include <cstring>
//#include <cmath>
//#include <cstdlib>
//#include <algorithm>
//#include<stack>
//#include<vector>
//
//using namespace std;
//int t[11];
//vector<int>a;
//vector<int>b;
//int aa,bb;
//bool solve()
//{
//      for(int i = 0 ; i< 1<<10 ;i++)
//      {
//          a.clear(),aa=0;
//          b.clear(),bb=0;
//        for(int j = 0 ; j < 10 ; j++)
//        {
//            if(i&(1<<j))
//            a.push_back(t[j]);
//            else
//            b.push_back(t[j]);
//
//        }
//      for(int i=0;i<a.size();i++)
//      {
//         if(a[i]>a[i+1])
//              // if (a.at(i) > a.at(i + 1))
//          {
//                 aa=1;break;
//          }
//
//      }
//
//        for(int i=0;i<b.size();i++)
//      {
//          if(b[i]>b[i+1])
//          {
//              bb=1;break;
//          }
//
//      }
//
//      if(aa==0&&bb==0)
//      {
//          return true;
//      }
//
//    }
//
//        return false;
//
//
//}
//int main()
//{
//    int n;
//    scanf("%d",&n);
//    while(n--)
//    {
//        a.clear();aa=0;
//        b.clear();bb=0;
//        memset(t,0,sizeof(t));
//        for(int i = 0 ; i < 10 ; i++)
//        {
//           scanf("%d",&t[i]);
//        }
//
//        if(solve())
//            cout<<"YES"<<endl;
//        else
//            cout<<"NO"<<endl;
//
//   }
//}

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

  using namespace std;

  int n;
  int ball[10];
  vector<int> l;
 vector<int> r;

 bool solve() {
     bool res = false;
  for (int i = 0; i < 1024; i++) {
        for (int j = 0; j < 10; j++) {
             if (i & (1 << j)) {
                 l.push_back(ball[j]);
             }
             else {
                 r.push_back(ball[j]);
             }
         }
         int lLen = l.size();
        int rLen = r.size();
         bool lOK = true;
         bool rOK = true;
        for (int j = 0; j < l.size() - 1; j++) {
             if (l[j] > l[j + 1]) {
                 lOK = false;
                 break;
             }
       }
        for (int j = 0; j < rLen - 1; j++) {
             if (r[j] > r[j + 1]) {
                 rOK = false;
                 break;
             }
        }
         if (lOK==true&& rOK==true) {
             res = true;
             break;
         }
         l.clear();
        r.clear();
    }
     return res;
 }

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

C++: #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>

int n;
const int m = 10;
int *data;
int *lp;
int *rp;

//return...fail:0, success:1
bool dfs(int i, int l, int r)
{
	if (i == m)
		return true;

	if (i<m && l<m && lp[l-1]<data[i]) {
		lp[l] = data[i];
		if (dfs(i+1, l+1, r))
			return true;
	}

	if (i<m && r<m && rp[l-1]<data[i]) {
		rp[r] = data[i];
		if (dfs(i+1, l, r+1))
			return true;
	}

	return false;
}

int main()
{
	int i, j;
	data = (int *)calloc(m, sizeof(int));
	lp = (int *)calloc(m, sizeof(int));
	rp = (int *)calloc(m, sizeof(int));
	memset(lp, 0, sizeof(int));
	memset(rp, 0, sizeof(int));
	
	scanf("%d ", &n);
	for (i=0; i<n; i++) {
		for (j=0; j<m; j++)
			scanf("%d ", &(data[j]));

	lp[0] = data[0];
	if (dfs(1, 1, 0))
		puts("YES");
	else
		puts("NO");

/*
		//check input
		for (j=0; j<m; j++)
			printf("%d ", data[j]);
		puts("");
*/
	}

	free(data);
	free(lp);
	free(rp);
	return 0;
}

C++: #include<stdio.h> 
#include<string.h>
int s[12];
bool p[12];
int flag;
int flag1;
void dfs(int com,int cur)
{
	if(cur==10)
	return;
	if(s[com]<=s[cur])
		p[com]=true,p[cur]=true,dfs(cur,cur+1);
	else
	    dfs(com,cur+1);	
}
int main()
{
	int n;
	scanf("%d",&n);
	while(n--)
	{
		flag=1,flag1=1;
		memset(p,false,sizeof(p));
		for(int i=0;i<10;i++)
		scanf("%d",&s[i]);
		dfs(0,1);
		int pre;
		for(int i=0;i<10;i++)
			{
				if(!p[i]) 
					if(flag1)
						pre=p[i],flag1=0;
					else
						{
							if(pre>s[i]) 
							{
								flag=0;
								break;
							}
							pre=s[i];
						}
			}
		if(flag)
		printf("YES");
		else
		printf("NO");
		printf("\n");
	 } 
	return 0;
 }

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

int main() {
	int n, x, z;
	cin >> n;

	for (int i = 0; i < n; i++) {
		vector< vector<int> > v = { {0}, {0}, {0} };
		z = 1;
		for (int j = 0; j < 10; j++) {
			cin >> x;
			for (int k = 0; k < z; k++) {
				if (v[k].back() < x) {
					v[k].push_back(x);
					break;
				}

				if (k == z - 1) {
					v[z].push_back(x);
					z++;
					break;
				}
			}

			if (z == 3) {
				x = -1;
				break;
			}
		}

		if (x == -1) {
			cout << "NO";
		}
		else {
			cout << "YES";
		}
		cout << endl;
	}
	return 0;
}

C++: #include<bits/stdc++.h>
using namespace std;
signed main(void){
	ios::sync_with_stdio(false);
	int T;
	cin>>T;
	for(int t=1;t<=T;t++){
		int a=0,b=0;
		for(int i=1,x;i<=10;i++){
			cin>>x;
			if(x<a&&x<b){
				cout<<"NO"<<endl;
				break;
			}
			else if(x>a&&x>b){
				if(a>b)	a=x;
				else	b=x;
			}
			else if(x<a&&x>b){
				b=x;
			}
			else if(x>a&&x<b){
				a=x;
			}
			if(i==10)
				cout<<"YES"<<endl;
		}
	}
}