import
java.util.*;
class
GFG{
static
void
Recurrence(
int
N,
int
K, ArrayList<Integer> sub_vector,
boolean
[] vis, ArrayList<ArrayList<Integer>> output,
int
last)
{
if
(N ==
0
&& K ==
0
)
{
output.add(
new
ArrayList<>(sub_vector));
return
;
}
if
(N <=
0
|| K <=
0
)
return
;
for
(
int
i = last; i <=
9
; i++)
{
if
(!vis[i])
{
vis[i] =
true
;
sub_vector.add(i);
Recurrence(N -
1
, K - i, sub_vector, vis,
output, i +
1
);
sub_vector.remove(sub_vector.size() -
1
);
vis[i] =
false
;
}
}
}
static
void
combinationSum(
int
N,
int
K)
{
if
(N *
9
< K)
{
System.out.print(
"Impossible"
);
return
;
}
boolean
[] vis =
new
boolean
[
10
];
ArrayList<Integer> sub_vector =
new
ArrayList<>();
ArrayList<ArrayList<Integer>> output =
new
ArrayList<>();
Recurrence(N, K, sub_vector, vis, output,
1
);
for
(
int
i =
0
; i < output.size(); i++)
{
for
(Integer x : output.get(i))
System.out.print(x +
" "
);
System.out.println();
}
return
;
}
public
static
void
main(String[] args)
{
int
N =
3
, K =
9
;
combinationSum(N, K);
}
}