using
System;
public
class
GFG{
static
int
[,]dp =
new
int
[5000, (1 << 10) + 5];
static
int
getmask(
int
val)
{
int
mask = 0;
if
(val == 0)
return
1;
while
(val > 0) {
int
d = val % 10;
mask |= (1 << d);
val /= 10;
}
return
mask;
}
static
int
countWays(
int
pos,
int
mask,
int
[]a,
int
n)
{
if
(pos == n)
return
(mask > 0 ? 1 : 0);
if
(dp[pos, mask] != -1)
return
dp[pos, mask];
int
count = 0;
count = count
+ countWays(pos + 1, mask, a, n);
if
((getmask(a[pos]) & mask) == 0) {
int
new_mask
= (mask | (getmask(a[pos])));
count = count
+ countWays(pos + 1,
new_mask, a, n);
}
return
dp[pos, mask] = count;
}
static
int
numberOfSubarrays(
int
[]a,
int
n)
{
for
(
int
i = 0; i < 5000; i++)
{
for
(
int
j = 0; j < (1 << 10) + 5; j++) {
dp[i,j] = -1;
}
}
return
countWays(0, 0, a, n);
}
public
static
void
Main(String[] args)
{
int
N = 4;
int
[]A = { 1, 12, 23, 34 };
Console.Write(numberOfSubarrays(A, N));
}
}