class Combination { private static char [] myArray = {'a','b','c'};
private static final int m = myArray.length;
private static int n =1, index1 =0;   //C m n 
private static char [] [] resultArray = new char [permutation(m,n)] [n];

public static void comb ( char [] myContainer, int len, int take) {
 char [] store1 = new char [len-1];
 if (take == 0) {
return;

else {
if (len == take) {
for ( int i = 0; i< len; i++) {
System.out.println("index1 has value :" + index1);
resultArray [index1-1] [i] = myContainer [i];
}
return;

else {
if (index1 >0) {
for ( int j = index1-1; j < permutation(len-1, take-1); j++ ) {
resultArray [j] [index1] = myContainer[0];
}
}
else {
for ( int j = index1; j < permutation(len-1, take-1); j++ ) {
resultArray [j] [index1] = myContainer[0];
}
}
index1++;
System.arraycopy(myContainer, 1, store1,0, len-1);
}
}
comb ( store1, len-1, take-1);
comb ( store1, len-1, take);
}
//---------------------************************************-------------------------------------

public static void printer( char [][] srcArray) {
int len1 = srcArray.length;
int len2 = srcArray[0].length;
for ( int k=0; k<len1; k++ ) {
for( int p= 0; p< len2; p++) {
System.out.print(srcArray [k] [p] + "");
}
System.out.println();
}
}

//********************************************************
//No problem below this line--------------------------

public static int factorial ( int c1) {
if ( c1 ==0 ) {
return 1;
}
else {
return c1 * (factorial ( c1-1));
}
}

public static int permutation ( int p1, int p2) {
return factorial (p1) / ( factorial (p2) * factorial ( p1-p2));
}

public static void main(String [] arg) {
//n = Integer.parseInt(arg [0]);
comb(myArray, m,n);
printer(resultArray);
//int check1 = factorial (5);
//int check2 = permutation( 5,1);
//System.out.println( "factorial (5) and permutation( 5,1) are " + check1+ " " + check2 +" respectively!");
}
}