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;

int main(void) {
    int N, a, b, c, x[10];
    cin >> N;
    for (; N--; ) {
        bool ok = true;
        b = c = 0;
        for (int i = 0; i < 10; i++) {
            cin >> x[i];
        }
        cerr << b << endl;
        cerr << c << endl;
        for (int i = 0; i < 10; i++) {
            a = x[i];
            if (a < b && a < c) {
                ok = false;
                break;
            } else if (a < b) {
                c = a;
            } else if (a < c) {
                b = a;
            } else if (b < c) {
                c = a;
            } else {
                b = a;
            }
        }
        if (ok) cout << "YES" << endl;
        else cout << "NO" << endl;
    }
    return 0;
}

C++: #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
 
using namespace std;
 
int s[10]={0};
 
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        for(int i=0;i<10;i++)
            scanf("%d",&s[i]);
        int a=0,b=0;
        bool flag=0;
        for(int i=0;i<10;i++)
        {
            if(s[i]<a&&s[i]<b)
            {
                flag=1;
                break;
            }
            else if(s[i]<a&&s[i]>b)b=s[i];
            else if(s[i]>a&&s[i]<b)a=s[i];
            else
            {
                a=a>b?s[i]:a;
                b=a<b?s[i]:b;
                if(a==b)a=s[i];
            }
        }
        if(flag)printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}

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

int T;
int input[10];
int B[10], C[10];
int Bcnt, Ccnt;
int flag = 1;

void dfs(int i);
void clear();


int main(void) {
    scanf("%d", &T);
    for (int i = 0; i<T; i++) {
        for (int j = 0; j<10; j++)
            scanf("%d", &input[j]);
        
        dfs(0);
        if (flag) puts("YES");
        else puts("NO");
        clear();
    }
}

void dfs(int i) {
    if (i>9) return;
    
    if (input[i]>B[Bcnt-1]) {
        B[Bcnt++] = input[i];
        dfs(i+1);
    } else if (input[i]>C[Ccnt-1]) {
        C[Ccnt++] = input[i];
        dfs(i+1);
    } else flag = 0;
}

void clear() {
    for (int i = 0; i<10; i++) {
        input[i] = 0;
        B[i] = 0;
        C[i] = 0;
    }
    Bcnt = Ccnt = 0;
}

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

int main(){
  int x;
  for(int i=0;i<x;++i){
    std::vector<int> vec(10);
    for(int l=0;l<10;++l){
      std::cin>>vec[l];
    }
    std::vector<std::vector<int> > vec2(2);
    vec2[0].push_back(vec[0]);
    for(int l=1;l<vec.size();++l){
      if(l==1){
        if(vec2[0][0]<vec[1]){
          vec2[0].push_back(vec[1]);
        }else vec2[1].push_back(vec[1]);
      }else{
        if(vec[l]>vec2[0][vec2[0].size()-1]){
          vec2[0].push_back(vec[l]);
        }else{
          if(vec2[1].size()==0)vec2[1].push_back(vec[l]);
          else if(vec2[1][vec2[1].size()-1]<vec[l]){
            vec2[1].push_back(vec[0]);
          }else{
            std::cout<<"NO"<<std::endl;
            goto con;
          }
        }
      }
    }
    std::cout<<"YES"<<std::endl;
    con:
  }
  return 0;
}

C++: #include<iostream>
#include<set> 
#include<vector>
#include<stack>
#include<string>
#include<ctype.h>
#include<sstream> 
#include<math.h>
#include<iomanip>
#include<algorithm>
#include<cstring> 
using namespace std; 
int flag;
int a[11];

void dfs(int x, int l, int r)
{
	if(x == 10) return;
	if(flag) return;
	if(a[x] > l) dfs(x+1, a[x], r);
	else if(a[x] > r) dfs(x+1, l, a[x]);
	else {
		flag = 1;
		return;
	}
 } 

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

C++: #include <bits/stdc++.h>

using namespace std;

bool dfs(queue<int> q, int a, int b)
{
  if (q.empty())
    return true;

  int front = q.front();
  q.pop();

  if (front > a && dfs(q, front, b))
    return true;
  if (front > b && dfs(q, a, front))
    return true;

  return false;
}

int main()
{
  int N;
  cin >> N;

  for (int n = 0; n < N; n++)
  {

    queue<int> q;

    for (int i = 0; i < 10; i++)
    {
      int x;
      cin >> x;
      q.push(x);
    }

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

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

typedef long long LL;
const int INF = (1<<30)-1;
const int mod=1000000007;
const int maxn=105;

int a[maxn];
int b[maxn],c[maxn];
int cnt1,cnt2;

bool ok(int b[],int c[]){
	for(int i=0;i<cnt1;i++){
		if(b[i] < b[i-1]) return false;
	}
	
	for(int i=0;i<cnt2;i++){
		if(c[i] < c[i-1]) return false;
	}
	return true;
}

int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		for(int i=0;i<10;i++) scanf("%d",&a[i]);
		
		int flag=0;
		for(int i=0;i< 1<<10;i++){
			 cnt1=0;cnt2=0;
			memset(b,0,sizeof(b));
			memset(c,0,sizeof(c));
			for(int j=0;j<10;j++){
				if(i>>j & 1) b[cnt1++]=a[j];
				else c[cnt2++]=a[j];				
			}
			
			if(ok(b,c)){
					flag=1;
					break;			
				}	
		//	printf("cnt1=%d  cnt2=%d\n",cnt1,cnt2);
		}
		if(flag) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

C++: #include <iostream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <iomanip>
#include <stack>
#include <sstream>
using namespace std;
int main(){
  int nlist[10],n,a;
  stack<int> b,c;
  b.push(0),c.push(0);
  bool f;
  cin>>n;
  for(;n;n--){
    f=true;
    for(int i=0;i<10;i++)
      cin>>nlist[i];
    for(int j=0;j<10;j++){
      a=nlist[j];
      if(!b.top())b.push(a);
      else{
	if(b.top()>a){
	  if(c.top()>a){f=false;break;}
	  else{c.push(a);}
	}
	else{b.push(a);}
      }
    }
    (f)?cout<<"YES"<<endl:cout<<"NO"<<endl;
  }
  return 0;
}

C++: #include<stdio.h>
#include<string.h>
int a[13],vis[13],flag;
void dfs(int x,int l,int r)
{
   	int i;
   	if(x==11)return;
   	if(flag)return ;
   	if(a[x]>l)dfs(x+1,a[x],r);
   	else  if(a[x]>r)dfs(x+1,l,a[x]);
   	else  {flag=1;return;}
	   
}
int main()
{
	int T,i,j,k;
	scanf("%d",&T);
	while(T--)
	{
		flag=0;
		for(i=1;i<=10;i++)
		scanf("%d",&a[i]);
	memset(vis,0,sizeof(vis));
		dfs(1,0,0);
		if(flag)printf("NO\n");
		else printf("YES\n");
	}
	return 0;
}