using
System;
public
class
GFG {
const
int
MAX = 20;
const
int
DIGITS = 10;
static
char
[]
set
=
new
char
[DIGITS];
static
int
end;
static
void
Combinations(
string
num,
char
[] pre,
int
curr,
int
lvl)
{
if
(curr < num.Length) {
if
(Char.IsDigit(num[curr])) {
pre[lvl] = num[curr];
Combinations(num, pre, curr + 1, lvl + 1);
}
else
if
(num[curr] ==
'$'
) {
for
(
int
i = 0; i < end; i++) {
pre[lvl] =
set
[i];
Combinations(num, pre, curr + 1,
lvl + 1);
}
}
else
{
Combinations(num, pre, curr + 1, lvl);
}
}
else
{
pre[lvl] =
'\0'
;
Console.WriteLine(
new
string
(pre));
}
}
static
int
FindNumUtil(
string
num)
{
char
[] pre =
new
char
[MAX];
end = 0;
for
(
int
i = 0; i < num.Length; i++) {
if
(Char.IsDigit(num[i])) {
bool
flag =
true
;
for
(
int
j = 0; j < end; j++) {
if
(
set
[j] == num[i]) {
flag =
false
;
break
;
}
}
if
(flag) {
set
[end++] = num[i];
}
}
}
Combinations(num, pre, 0, 0);
return
0;
}
static
int
FindNum(
string
num,
int
[] result_count)
{
if
(!String.IsNullOrEmpty(num)) {
result_count[0] = FindNumUtil(num);
return
result_count[0];
}
return
0;
}
public
static
void
Main()
{
string
num =
"23$$"
;
int
[] result_count =
new
int
[MAX];
FindNum(num, result_count);
}
}