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<stdio.h>
bool tansaku(int count,int n1,int n2,int ans[],int a[],int b[],bool flg)
{
	if (count == 10)
	{
		return true;
	}
	if (flg == false)
	{
		if (a[n1] < ans[count])
		{
			n1++;					
			a[n1] = ans[count];
			count++;
			bool hozon = tansaku(count,n1,n2,ans,a,b,flg);
			if (hozon == true)
			{
				flg = true;
			}
		}
		if (b[n2] < ans[count])
		{
			n2++;
			b[n2] = ans[count];
			count++;
			bool hozon = tansaku(count,n1,n2,ans,a,b,flg);
			if (hozon == true)
			{
				flg = true;
			}
		}
	}
	return flg;
}
int main(void)
{
	int n = 0;
	int a[10] = {0};
	int damy[20] = {0};
	bool ans_flg[1000] = {false};
	scanf("%d",&n);
	for (int i = 0;i < n;i++)
	{
		scanf("%d %d %d %d %d %d %d %d %d %d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]);
		if (tansaku(0,0,0,a,damy,damy,false) == true)
		{
			ans_flg[i] = true;
		}
	}
	for (int i = 0;i < n;i++)
	{
		if (ans_flg[i] == true)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}
	return 0;
}

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

using ll = long long;
#define debug(x) cerr << #x << ": " << x << endl;
#define line() cerr << "---------------" << endl;

bool flag;
int a[10];

void dfs(int idx, int l, int r) {
   if (idx == 10) {
      flag = true;
      return;
   }

   int val = a[idx];
   if (l < val) dfs(idx+1, val, r);
   if (r < val) dfs(idx+1, l, val);
}

int main() {
   int N;
   cin >> N;
   while (N--) {
      for (int i = 0; i < 10; i++) cin >> a[i];
      flag = false;
      dfs(0, -1, -1);
      puts(flag ? "YES" : "NO");
   }
   return 0;
}

C++: #include <iostream>
#include <stack>
using namespace std;
stack<int> r,l;
int m[10],hantei=0;;

void dfs(int i){
  //cout<< i << endl;///////////
  if(i==10)hantei=1;
  if(m[i]>r.top()){
    r.push(m[i]);
    dfs(i+1);
    r.pop();
  }
  if(m[i]>l.top()){
    l.push(m[i]);
    dfs(i+1);
    l.pop();
  }
}

int main(){
  int b,i;
  cin >> b;
  for(int k=0;k<b;k++){
    for(int j=0;j<10;j++)cin>>m[j];  
    r.push(m[0]);
    l.push(0);
    i=1;
    hantei=0;
    dfs(i);
    if(hantei==1)cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
   
  }
}

C++: #include <iostream>
#include <cstdio>
using namespace std;
int a[10];
bool dfs(int cur,int l,int r){
	if(cur==10){
		return true;
	}
	return (a[cur]>l && dfs(cur+1,a[cur],r)) || (a[cur]>r && dfs(cur+1,l,a[cur]));
}
int main(){
	ios::sync_with_stdio(false);
	int T;
	cin>>T;
	while(T--){
		for(int i=0;i<10;i++)
			cin>>a[i];
		puts(dfs(0,0,0)?"YES":"NO");
	}
	return 0;
}

C++: #include<iostream>
#include<string>
#include<algorithm>

using namespace std;

int N,balls[1000][10];
string result[1000];

void saiki(int Bnow,int Cnow,int next,int roop)
{
	if(next == 10)
	{
		result[roop] = "YES";
	}
	else
	{
		if(Bnow < balls[roop][next])
		{
			saiki(balls[roop][next],Cnow,next+1,roop);
		}
		if(Cnow < balls[roop][next])
		{
			saiki(Bnow,balls[roop][next],next+1,roop);
		}
	}
}

int main()
{
	for(int a = 0;a<1000;a++)
	{
		result[a] = "NO";
	}

	cin >> N;

	for(int i = 0;i<N;i++)
	{
		for(int a = 0;a<10;a++)
		{
			cin >> balls[i][a];
		}

		saiki(0,0,0,i);

		cout << result[i] << endl;
	}

}

C++: #include <iostream>

using namespace std;

int main(void){

  int a,b,c,out;
  a = b = c = out = 0;

  int n;
  cin >> n;
  while(n--){

    for( int l = 10 ; l > 0 ; l-- ){
      cin >> a;
      if( b < a ){
	b = a;
      }
      else if( c < a ){
	c = a;
      }
      else out = a;
    }
    if( out == 0 )cout << "YES" << endl;
    else cout << "NO" << endl;
  }
 return 0;
}

C++: #include <iostream>
#include <stack>

using namespace std;

int main(void){
	int n;

	cin >> n;
	for(int i=0;i<n;i++){
		int ball;
		stack<int> b,c;
		bool put=true;

		for(int j=0;put&&j<10;j++){
			cin >> ball;
			if(b.empty()||b.top()<ball)
				b.push(ball);
			else if(c.empty()||c.top()<ball)
				c.push(ball);
			else
				put=false;
		}
		cout << (put?"YES":"NO") << endl;
	}
}

C++: #define _USE_MATH_DEFINES
#include <iostream>
#include <sstream>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <limits>
#include <map>

typedef long long ll;
using namespace std;

typedef pair<int,int> P;

int main()
{
	int T;
	cin >> T;
	for(int t=0;t<T;t++){

		stack<int> stk1;
		stack<int> stk2;

		for(int i=0;i<10;i++){
			int tmp;
			cin >> tmp;
			
			if(stk1.empty() || stk1.top() < tmp) stk1.push(tmp);
			else if(stk2.empty() || stk2.top() < tmp) stk2.push(tmp);
			else {
				cout << "NO" << endl;
				goto next;
			}
		}
		cout << "YES" << endl;
next:;
	}
}

C++: #include<bits/stdc++.h>
using namespace std;
int main(){
  int aaaa;cin>>aaaa;
  for(int fdsaf=0;fdsaf<aaaa;fdsaf++){
    int a[10];
    for(int i=0;i<10;i++)
      cin>>a[i];
    int b[10]={};
    int c[10]={};
    b[0]=1;c[0]=0;
    int flag=1;
    int cnt=0;
    for(int i=0;i<2;i++){
      if(i==0){
	b[1]=1;c[1]=0;
      }else{
	b[1]=0;c[1]=1;
      }

      for(int j=0;j<2;j++){
	if(j==0){
	  b[2]=1;c[2]=0;
	}else{
	  b[2]=0;c[2]=1;
	}
	for(int k=0;k<2;k++){
	  if(k==0){
	    b[3]=1;c[3]=0;
	  }else{
	    b[3]=0;c[3]=1;
	  }
	  for(int l=0;l<2;l++){
	    if(l==0){
	      b[4]=1;c[4]=0;
	    }else{
	      b[4]=0;c[4]=1;
	    }
	    for(int m=0;m<2;m++){
	      if(m==0){
		b[5]=1;c[5]=0;
	      }else{
		b[5]=0;c[5]=1;
	      }
	      for(int n=0;n<2;n++){
		if(n==0){
		  b[6]=1;c[6]=0;
		}else{
		  b[6]=0;c[6]=1;
		}
		for(int o=0;o<2;o++){
		  if(o==0){
		    b[7]=1;c[7]=0;
		  }else{
		    b[7]=0;c[7]=1;
		  }
		  for(int p=0;p<2;p++){
		    if(p==0){
		      b[8]=1;c[8]=0;
		    }else{
		      b[8]=0;c[8]=1;
		    }
		    for(int q=0;q<2;q++){
		      if(q==0){
			b[9]=1;c[9]=0;
		      }else{
			b[9]=0;c[9]=1;
		      }
		      int bpointer=0;
		      int cpointer=0;
		      for(int r=0;r<10;r++){
			//cout<<a[r]<<" "<<b[r]<<" "<<c[r]<<endl;
			if(b[r]==1){
			  if(bpointer<a[r]){
			    bpointer=a[r];
			    if(r==9){
			      flag=0;
			      cout<<"YES"<<endl;
			      break;
			    }
			  }else{
			    break;
			  }
			}else if(c[r]==1){
			  //cout<<"!"<<endl;
			  if(cpointer<a[r]){
			    cpointer=a[r];
			    if(r==9){
			      flag=0;
			      cout<<"YES"<<endl;
			      break;
			    }
			  }else{
			    break;
			  }
			}
		      }
		      if(flag==0)break;
		    }
		    if(flag==0)break;
		  }
		  if(flag==0)break;
		}
		if(flag==0)break;
	      }
	      if(flag==0)break;
	    }
	    if(flag==0)break;
	  }
	  if(flag==0)break;
	}
	if(flag==0)break;
      }
      if(flag==0)break;
    }
    if(flag)
      cout<<"NO"<<endl;
  }
  return 0;
}

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

int main(){
    int n,s;
    cin >> n;
    for (int i=0; i < n; i++){
        int a=0, b=0, flg=0;
        for (int j = 0; j < 10; j++){
            cin >> s;
            if (s > a) a=s;
            else if (s > b) b=s;
            else flg = 1;
        }
        printf("%s\n", flg==0? "YES": "NO");
    }
}