import java.util.Vector;
import java.util.HashSet;




public class Main{
    

    public static void main(String[] args){
	HashSet[] set = new HashSet[10000]; //Hack!!!
	int n=5;
	int[] pos = new int[n+1];

	System.out.println("[]");
	for (int i=1;i<=n;i++){
	    Vector vector=createSubsets(set,pos,i,n);
	    set=(HashSet[])vector.elementAt(1);
	    pos=(int[])vector.elementAt(0);
	}
    }




    public static Vector createSubsets (HashSet[] oldsets, int[] oldpos, int size, int n){


	HashSet[] newsets=new HashSet[10000]; //Hack!!!
	int[] newpos=new int[n+1];
       	int counter=1;

	if (size==1){
	    for(int i=1;i<=n-size+1;i++){
		newpos[i]=counter;
		HashSet newSet = new HashSet();
		newSet.add(new Integer(i));
		newsets[counter]=newSet;
		System.out.println(newSet.toString());
		counter++;
	    }
	}

	else{
	    for(int i=1;i<=n-size+1;i++){
		// System.out.println("i = "+i);
		newpos[i]=counter;
		
		// 
		int j=oldpos[i+1];
		HashSet newSet;
		HashSet currentSet=oldsets[j];
		while(currentSet != null){
		    newSet=(HashSet)currentSet.clone();
		    newSet.add(new Integer(i));
		    newsets[counter]=newSet;
		    System.out.println(newSet.toString());
		    counter++;
		    j++;
		    currentSet=oldsets[j];
		}
	
	    }
	   
	}
	 	
	Vector vector = new Vector();
	vector.add(newpos);
	vector.add(newsets);
	return vector;
    }

}



