#ALDS1_6_B パーティション
#http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_6_B&lang=jp

#入力
#入力の最初の行に、数列Aの長さを表す整数nが与えられます
#二行目にn個の整数Aiが空白区切りで与えられます

#出力
#分割された数列を一行に出力してください。.
#数列の連続する要素は１つの空白で区切って出力してください。また、partition の基準となる要素を [   ]で示してください。

##p~iには基準A[r]より小さい要素
##i+1~jには基準A[r]より大きい要素
##が入るようにA内を入れ替えていく


def partition(a, p ,r)
  #xが基準値(配列の最後のもの)
  x = a[r]
  #敷居のindex-1
  i = p-1
  #敷居のindex
  j = p

  while (j < r) do
    if (a[j] <= x)
      i = i + 1
      t = a[i]
      a[i] = a[j]
      a[j] = t
    end
    j = j + 1
  end
  t = a[i+1]
  a[i+1] = a[r]
  a[r] = t
  return a,i+1
end
n = gets.to_i
a = gets.split(" ").map(&:to_i)

# p a
# 13
# patition(a,0,12)

a,x_index = partition(a,0,n-1)

a.each_with_index do |char,i|
  if (i!=0)
    print(" ")
  end
  if (i == x_index)
    print("[")
  end
  print(a[i])
  if (i == x_index)
    print("]")
  end
end
print("\n")














