## Problem: Max and Min Products

*Difficulty: Easy

Given a set, we need to find maximum and minimum possible product among all subsets of the set.

Examples:

Input : arr[] = {4, -2, 5}; Output: Maximum product = 20 Minimum product = -40 Maximum product is obtained by multiplying 4 5 Minimum product is obtained by multiplying 4, -2, 5 Input : arr[] = {-4, -2, 3, 7, 5, 0, 1}; Output: Maximum product = 840 Minimum product = -420 Maximum product is obtained by multiplying -4, -2, 3, 7, 5 Minimum product is obtained by multiplying -4, 3, 7,

**Input:**

The first line of input contains an integer T denoting the number of test cases. The description of T test cases follows. The first line of each test case contains a single integer N denoting the size of array. The second line contains N space-separated denoting the elements of the array.

**Output:**

Print the maximum product followed by a space followed by minimum subset product.

*Constraints:*

1 ≤ T ≤ 40

1 ≤ N ≤ 20

-100 ≤ A[i] <= 100

**Example:**

*Input*

2

3

1 2 3

4

-1 -2 -3 -4

*Output*

6 1

24 -24

""" @autho: loctv @time: 09:52PM January 4, 2017 """ import itertools import operator def all_sub_sets(l): """ generate all sub sets (with length 1,2,3,....n) l: list of numbers """ bound = len(l) for i in range(1, bound+1): yield itertools.combinations(l, i) def max_min_products(l): """ find max and min product from all sub sets l: list of numbers """ max_product, min_product = -100**20, 100**20 for sub_sets in all_sub_sets(l): for sub_set in sub_sets: product = reduce(operator.mul, sub_set) if product > max_product: max_product = product if product < min_product: min_product = product print max_product, min_product if __name__ == '__main__': t = input() for _ in range(t): n = input() l = map(int, raw_input().strip().split()) max_min_products(l)

## Reply