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>
#include <vector>
#include <deque>
#include <queue>
#include <list>
#include <stack>
#include <string>
#include <functional>
#include <numeric>
#include <cmath>
#include <iomanip>
#include <map>
#include <cstdlib>
#define INF 100000000
#define _INF -100000000
#define Loop(i, n) for(int i = 0; i < (int)n; i++)
#define Loop1(i, n) for(int i = 1; i <= (int)n; i++)
#define Loopr(i, n) for(int i = (int)n - 1; i >= 0; i--)
#define Loopr1(i, n) for(int i = (int)n; i >= 1; i--)
using namespace std;
typedef long long int ll;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
typedef pair<int, int> P;

int n;
vi A(10);
string ret;

void dfs(int k, int b, int c) {
	if (k > 9) {
		ret = "YES";
		return;
	}
	int a = A[k];
	if (a > b) dfs(k + 1, a, c);
	if (a > c) dfs(k + 1, b, a);
}

void solve() {
	ret = "NO";
	dfs(1, A[0], 0);
	cout << ret << endl;
}

int main() {
	cin >> n;
	Loop(i, n) {
		Loop(j, 10) {
			cin >> A[j];
		}
		solve();
	}
	return 0;
}

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[100] = {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 <cstdio>
using namespace std;

int main(){

int N,x,y,n;

scanf("%d",&N);

for(int i=0;i<N;i++){
x=n=0;
y=-1;
	for(int j=0;j<10;j++){
		scanf("%d",&n);
		if(x>n && y>n){
			printf("NO\n");
			break;
		}
		else if(/**(x>n &&**/ n>y)//||(n>y && y>x))
			y=n;
		else if(/**(y>n &&**/ n>x)//||(n>x && x>y))
			x=n;
		if(j==9)
			printf("YES\n");
	}			
}
return 0;
}

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

using namespace std;

int N;
int l[15];
int b,c;
int res[100000];


void solve(int k){
  for(int i=0;i<10;i++){
    if(b<l[i] && c<l[i]){
      if(l[i]-b < l[i]-c) b=l[i];
      else c=l[i];
    }
    else if(b<l[i] && c>l[i]) b=l[i];
    else if(b>l[i] && c<l[i]) c=l[i];
    else{
      res[k]=0;
      return;
    }
  }
  res[k]=1;
  return;
}


int main(){
  scanf("%d",&N);

  for(int i=0;i<N;i++){
    b,c=0;
    scanf("%d%d%d%d%d%d%d%d%d%d",&l[0],&l[1],&l[2],&l[3],&l[4],&l[5],&l[6],&l[7],&l[8],&l[9]);
    solve(i);
  }

  for(int i=0;i<N;i++){
    if(res[i]==0) printf("NO\n");
    else printf("YES\n");
  }


  return 0;
}

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

using namespace std;

typedef long long ll;
typedef pair<ll, ll> P;

#define MOD 1000000007
#define REP(i, N) for (int i = 0; i < N; ++i)
#define REP1(i, N) for (int i = 1; i <= N; ++i)
#define RREP(i, N) for (int i = N - 1; i >= 0; --i)
#define ALL(a) a.begin(), a.end()

int main() {
  int n;
  cin >> n;
  REP(i, n) {
    int a[10];
    REP(j, 10) cin >> a[j];
    bool ok = false;
    for (int mask = 0; mask < 1 << 10; ++mask) {
      int max1 = 0, max2 = 0;
      bool ok2 = true;
      REP(j, 10) {
        if (mask >> j & 1) {
          if (max1 < a[j])
            max1 = a[j];
          else
            ok2 = false;
        } else {
          if (max2 < a[j])
            max2 = a[j];
          else
            ok2 = false;
        }
      }
      if (ok2) {
        ok = true;
        break;
      }
    }
    cout << (ok ? "YES" : "NO") << endl;
  }
  return 0;
}

C++: #include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<cmath>
#include<utility>
#define ll long long int
#define ld long double
#define INF 1000000000
#define EPS 0.0000000001
#define rep(i,n) for(i=0;i<n;i++)
using namespace std;
typedef pair<int, int> P;

string str;

int main()
{
  int n;
  int max1=0,max2=0;
  int i,j;
  int num;

  cin>>n;

  rep(i,n){
    rep(j,10){

      scanf("%d",&num);

      if(max1>num && max2>num){
	cout<<"NO"<<endl;
	break;
      }
      else if(max1>num)
	max2=num;
      else if(max2>num)
	max1=num;
      else
	max1>max2 ? max1=num : max2=num;

    }//repj
    if(j==10)
      cout<<"YES"<<endl;
  }//repi
}

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

int a[15];
int b[15];
int n;

struct node {
	int cnt;
	int pos1,pos2;
	int an[15];
	int bn[15];
}ball,tmp,t;

bool bfs(){
	queue<node> q;
	ball.an[0]=a[0];
	ball.pos1=0;
	ball.pos2=0;
	ball.cnt=0;
	q.push(ball);
	while(!q.empty()){
		tmp=q.front();
		int f=1;
		if(tmp.an[tmp.pos1]<a[tmp.cnt+1]){
			tmp.an[tmp.pos1+1]=a[tmp.cnt+1];
			tmp.pos1++;
			tmp.cnt++;
			q.push(tmp);
			f=0;
		}
		tmp=q.front();
		if(tmp.pos2==0||tmp.bn[tmp.pos2]<a[tmp.cnt+1]){
			tmp.bn[tmp.pos2+1]=a[tmp.cnt+1];
			tmp.pos2++,tmp.cnt++;
			q.push(tmp);
			f=0;
		}
		/*
		for(int i=0;i<q.front().pos1;i++){
			cout<<q.front().an[i]<<"  ";
		}cout<<endl;
		for(int i=0;i<q.front().pos2;i++){
			cout<<q.front().bn[i]<<"  ";
		}cout<<endl;
		cout<<"   "<<tmp.cnt<<endl;
		q.pop();
	//	if(f) return 0;
	*/
	q.pop();
		if(tmp.cnt==9) return 1;
	}
	return 0;
} 

int main(){
	while(cin>>n){
		while(n--){
			ball.pos1=0,ball.pos2=0,ball.cnt=0,ball.bn[0]=0;
			for(int i=0;i<10;i++) cin>>a[i];
			if(bfs()) cout<<"YES\n";
			else cout<<"NO\n";
		}
	//	
	}
	return 0;
}