# Python code to find the max number of pairs
# Function to find the maximum number of subsets
def solve(n, mask, m, arr, target, current, ans):
# All the elements are used
if n == 0:
# If all the elements are used
if current == start:
ans = max(ans, m)
return m
# If all the elements are used but some
# elements are not member of any team
else:
return 1
temp = 0
for i in range(0, len(arr)):
j = pow(2, i)
if not (mask & j):
currenttarget = current & arr[i]
# If after taking current element target
# AND is found
if currenttarget == target:
ans1 = solve(n - 1, mask | j, m + 1, arr, target, start, ans)
ans2 = solve(n - 1, mask | j, m, arr,
target, currenttarget, ans)
temp = max(temp, max(ans1, ans2))
else:
temp = max(temp, solve(n - 1, mask | j, m,
arr, target, currenttarget, ans))
return temp
def maxSubset(arr, N, ans):
target = arr[0]
for i in range(1, N):
target = target & arr[i]
start = pow(2, 31) - 1
# Calling function to solve the function
print(solve(N, 0, 0, arr, target, start, ans)-1)
# Driver Code
if __name__ == '__main__':
arr = [1, 5, 2, 8]
N = len(arr)
# Function Call
start = 0
ans = 0
maxSubset(arr, N, ans)
# print(ans)
# This code is contributed by vikkycirus.