In this Kata, you will be given an array of arrays and your task will be to return the number of unique arrays that can be formed by picking exactly one element from each subarray. 

For example: `solve([[1,2],[4],[5,6]]) = 4`, because it results in only `4` possiblites. They are `[1,4,5],[1,4,6],[2,4,5],[2,4,6]`. 

```if:r
In R, we will use a list data structure.
So the argument for `solve` is a list of numeric vectors.
~~~
solve(list(c(1, 2), 4, c(5, 6)))
[1] 4
~~~
```

Make sure that you don't count duplicates; for example `solve([[1,2],[4,4],[5,6,6]]) = 4`, since the extra outcomes are just duplicates. 

See test cases for more examples.

Good luck!

If you like this Kata, please try:

[Sum of integer combinations](https://www.codewars.com/kata/59f3178e3640cef6d90000d5)

[Sum of array singles](https://www.codewars.com/kata/59f11118a5e129e591000134)

Difficulty: introductory

Starter code:

def solve(arr):
	

Solutions:
from operator import mul
from functools import reduce

def solve(arr):
    return reduce(mul, map(len, map(set, arr)), 1)

def solve(arr):
    x = 1
    for a in arr:
        x *= len(set(a))
    return x

from functools import reduce
from operator import mul
def solve(arr):
    return reduce(mul, map(len, map(set, arr)))

from functools import reduce


def solve(arr):
    return reduce(int.__mul__, (len(set(lst)) for lst in arr))

from functools import reduce

def solve(arr):
    return reduce(int.__mul__, map(len, map(set, arr)))

def solve(arr):
    res = 1
    for a in arr: res *= len(set(a))
    return res


import functools
from operator import mul
def solve(arr):
    return functools.reduce(mul, (len(set(i)) for i in arr))

def solve(arr):
    from functools import reduce
    return reduce(lambda a,b: a*b, [len(set(a)) for a in arr])

from operator import mul
from functools import reduce

def solve(arr):
    return reduce(mul, (len(set(xs)) for xs in arr), 1)