#include<stdio.h>
#define MAX 100000

void swap(int *x,int *y) {
  int z;
  z=*x;*x=*y;*y=z;
}

int partition(int *A, int p, int r){//一番右を基準にする。　そこから左は　小さい、　右は大きい
  
  int j;
  int  x = A[r];//基準
  int i = p-1;//最初   右と左の区切り
  
  for (j = p;j<r;j++){//ｊ０スタートして、最後まで
    if (A[j] <= x){
      i++;
      swap(&A[i],&A[j]);
    }
  }
  swap(&A[i+1],&A[r]);
  return i+1;//基準を返す
}



int main(){
  int A[MAX];
  int n;
  int i;
  int ii;
  
  scanf("%d",&n);
  for(i=0;i<n;i++){
    scanf("%d",&A[i]);
  }
 
  ii= partition(A,0,n-1);//配列、オリジン、基準の要素数
 
  
  for(i=0;i<n;i++){
    if(i)printf(" ");
    if(i==ii)printf("[%d]",A[i]);//基準をカッコで囲む
    else printf("%d",A[i]);
  }
  printf("\n");
 
  return 0;
}

