eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Поворот бітів

Поворот бітів

Нехай \textbf{n} = \textbf{2^s}, де \textbf{s} ≥ \textbf{0} --- ціле число. Для кожного цілого \textbf{i} від \textbf{0} до \textbf{n-1} визначимо значення \textbf{a_i} наступним чином. Нехай \textbf{b_\{s-1\}}...\textbf{b_1b_0} --- запис числа \textbf{i} у двійковій системі числення (при необхідності доповнена ліворуч нулями до довжини \textbf{s}). Переставимо ці біти у зворотному порядку (\textbf{b_0b_1}...\textbf{b_\{s-1\}}). Тоді значенням \textbf{a_i} буде число, двійковим записом якого є \textbf{b_0b_1}...\textbf{b_\{s-1\}}. Наприклад, \textbf{s} = \textbf{3}, \textbf{i} = \textbf{3}, тоді двійковий запис буде виглядати, як \textbf{011_2}, а запис у зворотному порядку --- \textbf{110_2}, відповідно, якщо \textbf{s} = \textbf{3}, то \textbf{a_3} = \textbf{6}. Потрібно для заданого числа \textbf{s} швидко відповідати на запити про підрахунок суми \textbf{a}_l+\textbf{a_\{l+1\}}+...+\textbf{a_r} по модулю \textbf{1000000007}. \InputFile У першому рядку вхідного файлу записано ціле число \textbf{s} (\textbf{0} ≤ \textbf{s} ≤ \textbf{31}). У другому рядку записано ціле число \textbf{k} --- кількість запитів (\textbf{1} ≤ \textbf{k} ≤ \textbf{5·10^5}). У наступних \textbf{k} рядках містяться самі запити --- пари цілих чисел \textbf{l}, \textbf{r} (\textbf{0} ≤ \textbf{l} ≤ \textbf{r} < \textbf{2^s}). \OutputFile У вихідний файл виведіть \textbf{k} чисел --- відповіді на відповідні запити.
Ліміт часу 2 секунди
Ліміт використання пам'яті 256 MiB
Вхідні дані #1
3
1
3 3
Вихідні дані #1
6
Автор Дмитро Жуков
Джерело Зимова Школа, Харків 2011, День 2