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 <vector>
#include <string>
using namespace std;
int balls[10];

bool dfs(int n, int left, int right) {
	if(n == 10) return true;
	if(balls[n] > left && dfs(n + 1, balls[n], right)) return true;
	if(balls[n] > right && dfs(n + 1, left, balls[n])) return true;
	return false;
}

int main() {
	int n;
	cin >> n;
	for(int i = 0; i < n; i++) {
		for(int j = 0; j < 10; j++) {
			cin >> balls[j];
		}
		cout << (dfs(0, 0, 0) ? "YES" : "NO") << endl;
	}
}

C++: #include <iostream>
#include <iomanip>
#include <vector>
#include <set>
#include <map>
#include <list>
#include <iterator>
#include <queue>
#include <stack>
#include <deque>
#include <sstream>
#include <algorithm>
#include <numeric>
#include <string>
#include <cmath>
#include <complex>
#include <functional>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cassert>
#include <cstdlib>
#include <cctype>

#define REP(i,m,n) for(int i=m;i<(int)n;i++)
#define rep(i,n) for(int i=0;i<(int)n;i++)
#define rrep(i,n) for(int i = 1; i <= n; i++)
#define drep(i,n) for(int i = n; i >= 0; i--)
#define rp(i,c) rep(i,(int)c.size())
#define fr(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define mp make_pair
#define pb push_back
#define all(c) (c).begin(),(c).end()
#define rall(u) (u).rbegin(),(u).rend()
#define dbg(x) cerr<<#x<<" = "<<(x)<<endl
#define v_delete(a,b) (a).erase(remove((a).begin(), (a).end(), b), (a).end())
#define v_unique(a) (a).erase(unique((a).begin(), (a).end()), (a).end())
#define VV(T) vector<vector< T > >
#define init(a,b) memset((a), (b), sizeof((a)))
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pii;
const int inf=1<<28;
const double INF=1e10,EPS=1e-9;


template<class T>int SIZE(T a){return a.size();}
template<class T>string IntToString(T num){string res;stringstream ss;ss<<num;return ss.str();}
template<class T>T StringToInt(string str){T res=0;for(int i=0;i<SIZE(str);i++)res=(res*10+str[i]-'0');return res;}
template<class T>T gcd(T a,T b){if(b==0)return a;return gcd(b,a%b);}
template<class T>T lcm(T a,T b){return a/gcd(a,b)*b;}

template <class T> void input(T& a, int n) { for (int i = 0; i < n; ++i) cin >> a[i]; }
template <class T> void input(T* a, int n) { for (int i = 0; i < n; ++i) cin >> a[i]; }

void chmax(int& a,int b){
	if(b > a){
		a=b;
	}
}
string j(){
	int a;
    int b=0,c=0;
    for(int i=0;i<10;i++){
        cin>>a;
        if(a>b){
            b=a;
        }else if(a>c){
            c=a;
        }else{
        	return "NO";
        }
    }
    return "YES";

}
int main(){
	int N;
	cin >> N;
	rep(i,N){
		cout << j() << endl;
	}
	return 0;
}

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

int main(void)
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++){
        queue < int > b, c;
        bool flag = true;
        
        b.push(0);
        c.push(0);
        
        int tmp;
        for (int i = 0; i < 10; i++){
            scanf("%d", &tmp);
            if ((b.back() < tmp) && (c.back() < b.back())){
                b.push(tmp);
                if (i == 9) flag = true;
            }
            else if (c.back() < tmp){
                c.push(tmp);
                if (i == 9) flag = true;
            }
            else flag = false;
        }
        if (flag) printf("YES\n");
        else if (!flag) printf("NO\n");
    }
    
    return (0);
}

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

using namespace std;

bool Check(const int* input, int s, int left, int right) {
  if (s == 10) return true;
  bool ret = false;
  if (input[s] >= left) {
    ret = Check(input, s + 1, input[s], right);
    if (ret) return true;
  } else if (input[s] >= right) {
    ret = Check(input, s + 1, left, input[s]);
    if (ret) return true;
  }
  return false;
}

int main() {
  int input[10];
  int left, right;
  int N;
  cin >> N;
  for (int i = 0; i < N; ++i) {
    for (int j = 0; j < 10; ++j) {
      cin >> input[j];
    }
    if (Check(input, 0, INT_MIN, INT_MIN)) {
      cout << "YES" << endl;
    } else {
      cout << "NO" << endl;
    }
  }
  return 0;
}

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

int p=0,nr=0,nl=0;
int a[10]={};
vector<int> r,l;

int f(int nr,int nl,int p){
	//cout<<"a[p]="<<a[p]<<" nr="<<nr<<" nl="<<nl<<" p="<<p<<endl;;
	if(a[p]>nr){
		r.push_back(a[p]);
		nr=a[p];
		if(p==9){
			return 1;
		}
		p++;
		if(f(nr,nl,p)==1){
			return 1;
		}
		else if(f(nr,nl,p)==-1){
			if(nr>nl){
				p--;
				r.pop_back();
			}
			else if(nl>nr){
				p--;
				l.pop_back();
			}
		}
	}
	if(a[p]>nl){
		l.push_back(a[p]);
		nl=a[p];
		if(p==9){
			return 1;
		}
		p++;
		if(f(nr,nl,p)==1){
			return 1;
		}
	}
	return -1;
	}

int main(){
	int i,j,n;
	cin>>n;
	for(i=0;i<n;i++){
		for(j=0;j<10;j++){
			cin>>a[j];
		}
		p=0;
		if(f(nr,nl,p)==1){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
return 0;
}

C++: #include <iostream>
using namespace std;
int main(void){
  int N,t,B,C,i,j;
  cin >> N;
  for(i = 0 ; i < N ; i++){
    for( B = 0, C = 0, j = 0; j < 10; j++){
      cin >> t;
      if(B >= t && C >= t) break;
      else if(B < t && C < t){
	if(B < C) C = t;
	else B = t;
      }
      else if(B < t) B = t;
      else if(C < t) C = t;
    }
    if(j == 10) cout << "YES" << endl;
    else cout << "NO" << endl;
  }
  return 0;
}

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

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

}


int main() {
	int t = 0;
	scanf("%d", &t);
	while (t--) {
		flag = 0;
		for (int i = 0; i < 10; i++) {
			scanf("%d", &a[i]);
		}
		dfs(0, 0, 0);
		if (flag == 1) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

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

int a[10];
bool ans=false;
int siwake(int cun,int b,int c){
	if(cun == 10){ans=true;}
	if(a[cun]>b){siwake(cun+1,a[cun],c);}
	if(a[cun]>c){siwake(cun+1,b,a[cun]);}
	return 0;
}

int main(){
	int i,z,zc;
	cin>>z;
	for(zc=0;zc!=z;zc++){
		for(i=0;i!=10;i++){cin>>a[i];}
		siwake(0,0,0);
		if(ans==true){cout<<"YES"<<endl;
			ans=false;
		}
		else{cout<<"NO"<<endl;}
	}
}