Polycarpus has a sequence, consisting of n non-negative integers: a 1, a 2, ..., a n . Let's define function f(l, r) ( l, r are integer, 1 ≤ l ≤ r ≤ n ) for sequence a as an operation of bitwise OR of all the sequence elements with indexes from l to r . Formally: f(l, r) = a l a l + 1 ... a r . Polycarpus took a piece of paper and wrote out the values of function f(l, r) for all l, r ( l, r are integer, 1 ≤ l ≤ r ≤ n ). Now he wants to know, how many distinct values he's got in the end. Help Polycarpus, count the number of distinct values of function f(l, r) for the given sequence a . Expression x y means applying the operation of bitwise OR to numbers x and y . This operation exists in all modern programming languages, for example, in language C++ and Java it is marked as "", in Pascal — as "or".
输入描述:
The first line contains integer n(1 ≤ n ≤ 105) — the number of elements of sequence a. The second line contains n space-separated integers a1, a2, ..., an(0 ≤ ai ≤ 106) — the elements of sequence a.
输出描述:
Print a single integer — the number of distinct values of function f(l, r) for the given sequence a.Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use cin, cout streams or the %I64d specifier.
示例1
输入
3<br />1 2 0<br />10<br />1 2 3 4 5 6 1 2 9 10<br />
备注:
In the first test case Polycarpus will have 6 numbers written on the paper: f(1, 1) = 1, f(1, 2) = 3, f(1, 3) = 3, f(2, 2) = 2, f(2, 3) = 2, f(3, 3) = 0. There are exactly 4 distinct numbers among them: 0, 1, 2, 3.
加载中...