/* package whatever; // don't place package name! */
import java.util.* ;
import java.lang.* ;
import java.io.* ;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
// The main function that prints all combinations of size r
// in arr[] of size n. This function mainly uses combinationUtil()
static void printCombination
( String arr
[ ] ,
int n,
int r
) {
// A temporary array to store all combination one by one
// Print all combination using temprary array 'data[]'
combinationUtil( arr, data, 0 , n- 1 , 0 , r) ;
}
/* arr[] ---> Input Array
data[] ---> Temporary array to store current combination
start & end ---> Staring and Ending indexes in arr[]
index ---> Current index in data[]
r ---> Size of a combination to be printed */
static void combinationUtil
( String arr
[ ] ,
String data
[ ] ,
int start,
int end,
int index,
int r
) {
// Current combination is ready to be printed, print it
if ( index == r)
{
for ( int j= 0 ; j< r; j++ )
System .
out .
printf ( "%s " , data
[ j
] ) ; return ;
}
// replace index with all possible elements. The condition
// "end-i+1 >= r-index" makes sure that including one element
// at index will make a combination with remaining elements
// at remaining positions
for ( int i= start; i<= end && end- i+ 1 >= r- index; i++ )
{
data[ index] = arr[ i] ;
combinationUtil( arr, data, i+ 1 , end, index+ 1 , r) ;
}
}
{
// Driver program to test above functions
String arr
[ ] = { "A" ,
"B" ,
"C" ,
"D" ,
"E" ,
"F" ,
"G" } ; int r = 3 ;
int n = arr.length ;
printCombination( arr, n, r) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJLy8gVGhlIG1haW4gZnVuY3Rpb24gdGhhdCBwcmludHMgYWxsIGNvbWJpbmF0aW9ucyBvZiBzaXplIHIKLy8gaW4gYXJyW10gb2Ygc2l6ZSBuLiBUaGlzIGZ1bmN0aW9uIG1haW5seSB1c2VzIGNvbWJpbmF0aW9uVXRpbCgpCnN0YXRpYyB2b2lkIHByaW50Q29tYmluYXRpb24oU3RyaW5nIGFycltdLCBpbnQgbiwgaW50IHIpCnsKICAgIC8vIEEgdGVtcG9yYXJ5IGFycmF5IHRvIHN0b3JlIGFsbCBjb21iaW5hdGlvbiBvbmUgYnkgb25lCiAgICBTdHJpbmdbXSBkYXRhID0gbmV3IFN0cmluZ1tyXTsKIAogICAgLy8gUHJpbnQgYWxsIGNvbWJpbmF0aW9uIHVzaW5nIHRlbXByYXJ5IGFycmF5ICdkYXRhW10nCiAgICBjb21iaW5hdGlvblV0aWwoYXJyLCBkYXRhLCAwLCBuLTEsIDAsIHIpOwp9CiAKLyogYXJyW10gIC0tLT4gSW5wdXQgQXJyYXkKICAgZGF0YVtdIC0tLT4gVGVtcG9yYXJ5IGFycmF5IHRvIHN0b3JlIGN1cnJlbnQgY29tYmluYXRpb24KICAgc3RhcnQgJiBlbmQgLS0tPiBTdGFyaW5nIGFuZCBFbmRpbmcgaW5kZXhlcyBpbiBhcnJbXQogICBpbmRleCAgLS0tPiBDdXJyZW50IGluZGV4IGluIGRhdGFbXQogICByIC0tLT4gU2l6ZSBvZiBhIGNvbWJpbmF0aW9uIHRvIGJlIHByaW50ZWQgKi8Kc3RhdGljIHZvaWQgY29tYmluYXRpb25VdGlsKFN0cmluZyBhcnJbXSwgU3RyaW5nIGRhdGFbXSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgaW5kZXgsIGludCByKQp7CiAgICAvLyBDdXJyZW50IGNvbWJpbmF0aW9uIGlzIHJlYWR5IHRvIGJlIHByaW50ZWQsIHByaW50IGl0CiAgICBpZiAoaW5kZXggPT0gcikKICAgIHsKICAgICAgICBmb3IgKGludCBqPTA7IGo8cjsgaisrKQogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiJXMgIiwgZGF0YVtqXSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGYoIlxuIik7CiAgICAgICAgcmV0dXJuOwogICAgfQogCiAgICAvLyByZXBsYWNlIGluZGV4IHdpdGggYWxsIHBvc3NpYmxlIGVsZW1lbnRzLiBUaGUgY29uZGl0aW9uCiAgICAvLyAiZW5kLWkrMSA+PSByLWluZGV4IiBtYWtlcyBzdXJlIHRoYXQgaW5jbHVkaW5nIG9uZSBlbGVtZW50CiAgICAvLyBhdCBpbmRleCB3aWxsIG1ha2UgYSBjb21iaW5hdGlvbiB3aXRoIHJlbWFpbmluZyBlbGVtZW50cwogICAgLy8gYXQgcmVtYWluaW5nIHBvc2l0aW9ucwogICAgZm9yIChpbnQgaT1zdGFydDsgaTw9ZW5kICYmIGVuZC1pKzEgPj0gci1pbmRleDsgaSsrKQogICAgewogICAgICAgIGRhdGFbaW5kZXhdID0gYXJyW2ldOwogICAgICAgIGNvbWJpbmF0aW9uVXRpbChhcnIsIGRhdGEsIGkrMSwgZW5kLCBpbmRleCsxLCByKTsKICAgIH0KfQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJLy8gRHJpdmVyIHByb2dyYW0gdG8gdGVzdCBhYm92ZSBmdW5jdGlvbnMKICAgIFN0cmluZyBhcnJbXSA9IHsiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyJ9OwogICAgaW50IHIgPSAzOwogICAgaW50IG4gPSBhcnIubGVuZ3RoOwogICAgcHJpbnRDb21iaW5hdGlvbihhcnIsIG4sIHIpOwoJfQp9