def
solve(n, mask, m, arr, target, current, ans):
if
n
=
=
0
:
if
current
=
=
start:
ans
=
max
(ans, m)
return
m
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
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
print
(solve(N,
0
,
0
, arr, target, start, ans)
-
1
)
if
__name__
=
=
'__main__'
:
arr
=
[
1
,
5
,
2
,
8
]
N
=
len
(arr)
start
=
0
ans
=
0
maxSubset(arr, N, ans)