

public class CruelAndUnusual {

 	private static int A[];

 	private static void swap (int i, int j) {
 		int t;
 		t=A[i];
 		A[i]=A[j];
 		A[j]=t;
 	}


 	private static void CRUEL(int l, int r) {
 		   int n=r-l+1;
 		   if (n > 1) {
 			  CRUEL(l,l+n/2-1);
 		      CRUEL(l+n/2,r);
 		      UNUSUAL(l,r);
 		   }
 	}

 	private static void UNUSUAL(int l, int r) {
 		int n=r-l+1;
 		int i;

 			 if (n == 2) {
 		        if (A[l] > A[r])
 		            swap (l,r);
 		   }
 		   else {
 		         for (i=1;  i<= n/4; i++)
 		               swap (l+i + n/4-1, l+i + n/2-1);
 		         UNUSUAL(l,l+n/2-1);
 		         UNUSUAL(l+n/2,r);
 		         UNUSUAL(l+n/4, l+3*n/4-1);
 		   }

 	}

 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		// TODO Auto-generated method stub

 		int i;

 		int size=8; // size MUST be a power of 2 !

 		A = new int [size+1]; // we do not want to use A[0]

 		for (i=1; i<=size; i++)
 			A[i]=100-i+1;

 		CRUEL(1,size);

 		for (i=1; i<=size; i++)
 			System.out.println(A[i]);


 	}

}


