Олимпиадный тренинг

Задача . A. Новая функция


Задача

Темы: битмаски *1600

У Поликарпа есть последовательность, состоящая из n целых неотрицательных чисел: a1, a2, ..., an.

Определим функцию f(l, r) (l, r — целые, 1 ≤ l ≤ r ≤ n) для последовательности a как операцию побитового ИЛИ всех элементов последовательности с индексами от l до r. Формально: f(l, r) = al | al + 1 | ...  | ar.

Поликарп выписал на листок бумаги значения функции f(l, r) для всех l, r (l, r — целые, 1 ≤ l ≤ r ≤ n). Теперь он хочет узнать, сколько различных чисел у него получилось.

Помогите Поликарпу, посчитайте количество различных значений функции f(l, r) для заданной последовательности a.

Выражение x | y обозначает применение операции побитового ИЛИ к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается «|», в Pascal — «or».

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество элементов последовательности a. Во второй строке записаны n целых чисел через пробел a1, a2, ..., an (0 ≤ ai ≤ 106) — элементы последовательности a.

Выходные данные

Выведите единственное целое число — количество различных значений функции f(l, r) для заданной последовательности a.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

В первом тестовом примере на листочке Поликарпа будет записано 6 чисел: f(1, 1) = 1, f(1, 2) = 3, f(1, 3) = 3, f(2, 2) = 2, f(2, 3) = 2, f(3, 3) = 0. Среди этих чисел ровно 4 различных числа: 0, 1, 2, 3.


Примеры
Входные данныеВыходные данные
1 3
1 2 0
4
2 10
1 2 3 4 5 6 1 2 9 10
11

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w643
Комментарий учителя