Problem:
玉

図のように二股に分かれている容器があります。1 から 10 までの番号が付けられた10 個の玉を容器の開口部 A から落とし、左の筒 B か右の筒 C に玉を入れます。板 D は支点 E を中心に左右に回転できるので、板 D を動かすことで筒 B と筒 C のどちらに入れるか決めることができます。

開口部 A から落とす玉の並びを与えます。それらを順番に筒 B 又は筒 Cに入れていきます。このとき、筒 B と筒 C のおのおのが両方とも番号の小さい玉の上に大きい玉を並べられる場合は YES、並べられない場合は NO と出力するプログラムを作成してください。ただし、容器の中で玉の順序を入れ替えることはできないものとします。また、続けて同じ筒に入れることができるものとし、筒 B, C ともに 10 個の玉がすべて入るだけの余裕があるものとします。

Input

複数のデータセットが与えられます。１行目にデータセット数 N が与えられます。つづいて、N 行のデータセットが与えられます。各データセットに 10 個の番号が左から順番に空白区切りで与えられます。

Output

各データセットに対して、YES または NO を１行に出力して下さい。

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

Solution in Ruby (judge verdict: Accepted)

def simulateFunc(balls)
  stk1 = 0
  stk2 = 0
  counter = 0

  balls.each do |ball|
    dif1 = ball.to_i - stk1
    dif2 = ball.to_i - stk2

    if dif1 > 0 && dif2 > 0
      if dif1 < dif2
        stk1 = ball.to_i
      else
        stk2 = ball.to_i
      end

      counter += 1
    elsif dif1 > 0
      stk1 = ball.to_i
      counter += 1
    elsif dif2 > 0
      stk2 = ball.to_i
      counter += 1
    end
  end
  
  return counter == balls.size
end

n = gets.chomp.to_i

n_test = 0
while n_test < n do
  balls = gets.chomp.split(" ");
  if simulateFunc(balls)
    puts "YES"
  else
    puts "NO"
  end
  n_test += 1
end