#include<stdio.h>
#include<stdlib.h>

int partition(int *A,int p,int r)
{
	int x = A[r];//基準値をxに格納
	int box,j,i = p-1;
	for( j = p ; j < r ; j++){//jがこれから探索する要素番号を示す
		if( A[j] <= x){//xより小さければ
			i = i+1;//iをインクリメントする
			box=A[i];//xより大きくかつ最後に追加した要素と入れ替える
			A[i]=A[j];
			A[j]=box;
		}
	}
	box=A[i+1];//基準値をiの位置に格納する
	A[i+1]=A[r];
	A[r]=box;
	
	return i+1;
}

int main(void)
{
	int mid,i,n,*A;
	scanf("%d",&n);
	A = (int*)malloc(sizeof(int)*n+1);
	for(i=0;i<n;i++) scanf("%d",&A[i]);
	
	mid=partition(A,0,n-1);
	
	for(i=0;i<n;i++) {
		if(i!=0) printf(" ");
		if(i==mid) printf("[");
		printf("%d",A[i]);
		if(i==mid) printf("]");
	}
	printf("\n");

	
	free(A);
	return 0;
}
