import
java.util.*;
public
class
Main {
static
int
binToDec(String n) {
String num =
new
String(n);
int
dec_value =
0
;
int
base1 =
1
;
int
len1 = num.length();
for
(
int
i = len1 -
1
; i >=
0
; i--) {
if
(num.charAt(i) ==
'1'
) {
dec_value += base1;
}
base1 = base1 *
2
;
}
return
dec_value;
}
static
void
printDecimal(String permute) {
Set<Integer> allDecimals =
new
HashSet<Integer>();
char
[] charArray = permute.toCharArray();
Arrays.sort(charArray);
do
{
int
result = binToDec(
new
String(charArray));
allDecimals.add(result);
}
while
(nextPermutation(charArray));
for
(
int
i : allDecimals) {
System.out.print(i +
" "
);
}
System.out.println();
}
static
void
totalPermutations(String str) {
printDecimal(str);
}
static
String binarystring =
"1010"
;
public
static
void
main(String[] args) {
totalPermutations(binarystring);
}
static
boolean
nextPermutation(
char
[] arr) {
int
i = arr.length -
2
;
while
(i >=
0
&& arr[i] >= arr[i +
1
]) {
i--;
}
if
(i <
0
) {
return
false
;
}
int
j = arr.length -
1
;
while
(arr[j] <= arr[i]) {
j--;
}
swap(arr, i, j);
reverse(arr, i +
1
, arr.length -
1
);
return
true
;
}
static
void
swap(
char
[] arr,
int
i,
int
j) {
char
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
static
void
reverse(
char
[] arr,
int
i,
int
j) {
while
(i < j) {
swap(arr, i, j);
i++;
j--;
}
}
}