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(){

	int a, b, n, m, ball[10];
	
	cin >> n;
	
	while(cin >> ball[0]){
		for(int i=1; i<10; i++){
			cin >> ball[i];
		}
		
		a = 0;
		b = 0;
		for(int i=0; i<10; i++){
			if(ball[i] < a && ball[i] < b){
				cout << "NO" << endl;
				break;
			}
			else if(a < ball[i] && ball[i] < b){
				a = ball[i];
			}
			else{
				b = ball[i];
			}
			
			if(i == 9) cout << "YES" << endl;
		}
	}

	return 0;

}

C++: #include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
int a[10];
bool ans;
void dfs(int i,int r,int l){
	if(i==10){
		ans=1;
		return;
	}
	if(a[i]<r&&a[i]<l)return;
	if(ans)return;
	if(r<a[i])dfs(i+1,a[i],l);
	if(l<a[i])dfs(i+1,r,a[i]);

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

C++: #include<stdio.h>

int unname(int *ball,int i,int b,int c)
{
	if(i==10) return 1;
	if(c<ball[i]){
		c=ball[i];
		i++;
		return unname(ball,i,b,c);
	}
	if(b<ball[i]){
		b=ball[i];
		i++;
		return unname(ball,i,b,c);
	}
	return 0;
}

int main()
{
	int ball[10];
	int result,i;
	int b=0,c=0;
	for(i=0;i<10;i++)
	{
		scanf("%d",&ball[i]);
	}
	c=ball[0];
	i=0;
	result=unname(ball,i,b,c);
	if(result==1) printf("Yes\n");
	else printf("No\n");
	return 0;
}

C++: #include <algorithm>
#include <iostream>
#include <cstring>
#include <climits>
#include <cstdio>
#include <string>
#include <cmath>
#include <set>
#include <queue>
#include <map>
#include <vector>
#include <cstdlib>
#include <stack>
#include <time.h>
using namespace std;
typedef long long LL;
const int MOD = int(1e9)+7;
const int INF = 0x3f3f3f3f;
const double EPS = 1e-9;
const double PI = acos(-1.0); //M_PI;
const int maxn = 100001;
int a[maxn];
int vis[maxn];

void dfs(int cur , int next , int n)
{
    if(cur >= n || next >= n) return ;
    else{
        if(a[cur] < a[next]){
             vis[next] = 1;
             dfs(next , next + 1 , n);
        }
        else{
            dfs(cur , next + 1 , n);
        }
    }
}

int main()
{
    #ifdef DoubleQ
    freopen("in.txt" , "r" , stdin);
    #endif
    int n;
    cin >> n;
    while(n --){
        for(int i = 0 ; i < n ; i ++){
            cin >> a[i];
        }
        int flag = 0;
        int y = 0;
        for(int i = 0 ; i < n ; i ++){
            memset(vis , 0 , sizeof(vis));
            vis[i] = 1;
            dfs(i , i + 1 , n);
            int tp = -1;
            flag = 0;
            for(int j = 0 ; j < n ; j ++){
                if(vis[j] == 0){
                    if(a[j] >= tp){
                        tp = a[j];
                    }
                    else{
                        flag = 1;
                        break;
                    }
                }
            }
            if(flag == 0)
            {
                y = 1;
                cout << "YES" << endl;
                break;
            }
        }
        if(y == 0) cout << "NO" << endl;
    }
}

C++: //AOJ0033
/*
Sample Input
2
3 1 4 2 5 6 7 8 9 10
10 9 8 7 6 5 4 3 2 1
Output for the Sample Input
YES
NO*/
#include <bits/stdc++.h>
using namespace std;
int a[15],l[15],r[15];
bool wyh;
void dfs(int i,int j, int k){
	if(i>10){
		wyh=true;
		return;
	}
	//if(wyh)return ;
	if(a[i]>l[j-1]){
		l[j]=a[i];
		dfs(i+1,j+1,k);
	}
	if(a[i]>r[k-1]){
		r[k]=a[i];
		dfs(i+1,j,k+1);
	}
	//return false;
}
int main(){
	ios::sync_with_stdio(false);
	int t;
	cin>>t;
	while(t--){
		for(int i=1;i<=10;i++){
			cin>>a[i];
		}
		wyh=false;
		dfs(1,1,1);
		if(wyh)cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}

C++: #include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<map>
#include<queue>
#include<cmath>
#include<stack>
#include<vector>
#include<cstdio>
#define MAXN 2555
#define INF 0x3f3f3f3f
#define v first
#define b second
using namespace std;
stack<int>q;
stack<int>p;
int s[15];
bool flag;
void dfs(int x)
{
   if(x==10)
   {
      flag=true;
      return ;
   }
   if(s[x]>q.top())
   {
      q.push(s[x]);
      dfs(x+1);
      q.pop();
   }
   if(s[x]>p.top())
   {
      p.push(s[x]);
      dfs(x+1);
      p.pop();
   }
   return ;
}
int main()
{
   int t;
   scanf("%d",&t);
   q.push(0);
   p.push(0);
   while(t--)
   {
      flag=false;
      for(int i=0;i<10;i++)
         scanf("%d",&s[i]);
      dfs(0);
      if(flag)
         cout<<"YES"<<endl;
      else cout<<"NO"<<endl;
   }
   return 0;
}

C++: #include <stdio.h>

bool canOrder(int s[10], int index, int left_top, int right_top) {
  if (index == 10) {
    return true;
  }
  if (s[index] > left_top) {
    if (canOrder(s, index + 1, s[index], right_top)) {
      return true;
    }
  }
  if (s[index] > right_top) {
    if (canOrder(s, index + 1, left_top, s[index])) {
      return true;
    }
  }
  return false;
}

bool canOrder(int s[10]) {
  return canOrder(s, 0, 0, 0);
}

int main() {
  //freopen("Ball.in", "r", stdin);
  int test_count;
  scanf("%d", &test_count);
  for (int test = 0; test < test_count; ++test) {
    int s[10];
    for (int i = 0; i < 10; ++i) {
      scanf("%d", &s[i]);
    }
    bool result = canOrder(s);
    printf("%s\n", result ? "YES" : "NO");
  }
  return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
void dfs(int, int, int);
int arr[10];
bool flag;
int main() {
  int n;
  cin >> n;
  while (n--) {
    for (int i = 0; i < 10; i++)
      cin >> arr[i];
    dfs(0, 0, 0);
    if (flag)
      cout << "YES" << endl;
    else
      cout << "NO" << endl;
    flag = false;
  }
  return 0;
}

void dfs(int sta1, int sta2, int index) {
  if (index == 10) {
    flag = true;
    return;
  }
  if (sta1 < arr[index]) {
    sta1 = arr[index];
    dfs(arr[index], sta2, index + 1);
  }
  if (sta2 < arr[index]) {
    sta2 = arr[index];
    dfs(sta1, sta2, index + 1);
  }
}

C++: #include<cstdio>
#include<iostream>
#include<cstdlib>
using namespace std;
const int N =10;
int main()
{
	int n;
	scanf("%d",&n);
	while(n--){
		bool ans=true;
		int a,b=-1,c=-1;
		for(int i=0;i<N;i++)
		{
			scanf("%d",&a);
			if(ans){
				if(a>b)	b=a;
				else if(a>c)	c=a;
				else	ans=false;
			}
		}
		cout<<(ans ? "YES":"NO")<<endl;
	}




	
	return 0;
}

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

using namespace std;
int a[15], f;
void dfs(int x, int y, int step)
{
    if( step == 11)
{
     f = 1;
     return;
}    if(x < a[step]) dfs(a[step], y, step+1);
    else if(y < a[step]) dfs(x, a[step], step+1);
  else
    return ;
}
int main ()
{
    int t;
    scanf("%d", &t);
    while(t--)
    {
        int i;
        f = 0;
        for(i = 1;i <= 10;i++)
            scanf("%d", &a[i]);
            dfs(0, 0, 1);
        if(f)
            printf("YES\n");
        else
            printf("NO\n");
    }
}