using
System;
using
System.Collections.Generic;
using
System.Linq;
public
class
GFG
{
public
static
List<
string
>
get_powerset(List<
string
> string_list)
{
List<
string
> powerset =
new
List<
string
>();
powerset.Add(
""
);
for
(
int
i = 1; i <= string_list.Count; i++) {
foreach
(List<
string
> combination
in
combinations(string_list, i))
{
string
subset
=
string
.Join(
""
, combination);
powerset.Add(subset);
}
}
return
powerset;
}
public
static
int
get_rank(List<
string
> string_list,
string
k)
{
List<
string
> powerset = get_powerset(string_list);
if
(!powerset.Contains(k)) {
return
-1;
}
return
powerset.IndexOf(k) + 1;
}
public
static
IEnumerable<IEnumerable<T> >
combinations<T>(IEnumerable<T> items,
int
n)
{
if
(n == 0) {
return
new
[] { Enumerable.Empty<T>() };
}
else
{
List<List<T> > result =
new
List<List<T> >();
for
(
int
i = 0; i <= items.Count() - n; i++) {
T item = items.ElementAt(i);
foreach
(IEnumerable<T> combination
in
combinations(items.Skip(i + 1),
n - 1))
{
List<T> list =
new
List<T>();
list.Add(item);
list.AddRange(combination);
result.Add(list);
}
}
return
result;
}
}
public
static
void
Main()
{
List<
string
> string_list
=
new
List<
string
>() {
"ab"
,
"pq"
,
"nm"
};
string
k =
"pqnm"
;
int
rank = get_rank(string_list, k);
Console.WriteLine(rank);
}
}