using
System;
class
GFG
{
static
int
subsetXOR(
int
[]arr,
int
n,
int
K)
{
int
max_ele = arr[0];
for
(
int
i = 1; i < n; i++)
if
(arr[i] > max_ele)
max_ele = arr[i];
int
m = (1 << (
int
)(Math.Log(max_ele) /
Math.Log(2) + 1)) - 1;
int
[ , , ] dp =
new
int
[n + 1 , m + 1 ,n + 1];
for
(
int
i = 0; i <= n; i++)
for
(
int
j = 0; j <= m; j++)
for
(
int
k = 0; k <= n; k++)
dp[i, j, k] = 0;
for
(
int
i = 0; i <= n; i++)
dp[i, 0, 0] = 1;
for
(
int
i = 1; i <= n; i++)
{
for
(
int
j = 0; j <= m; j++)
{
for
(
int
k = 0; k <= n; k++)
{
dp[i, j, k] = dp[i - 1, j, k];
if
(k != 0) {
dp[i, j, k] += k * dp[i - 1, j ^
arr[i - 1], k - 1];
}
}
}
}
int
ans = 0;
for
(
int
i = 1; i <= n; i++)
{
ans += dp[n, K, i];
}
return
ans;
}
public
static
void
Main()
{
int
[]arr = { 1, 2, 3 };
int
k = 1;
int
n = arr.Length;
Console.WriteLine(subsetXOR(arr, n, k));
}
}