#ATarc066b. [ABC050D] Xor Sum

[ABC050D] Xor Sum

题目描述

给定一个正整数 NN。请计算有多少对整数 u,vu,v0u,vN0 \leq u, v \leq N),满足存在非负整数 a,ba, b,使得 axorb=ua \operatorname{xor} b = ua+b=va + b = v。这里,xor\operatorname{xor} 表示按位异或运算。由于答案可能非常大,请输出答案对 109+710^9+7 取模的结果。

输入格式

输入为一行,包含一个整数 NN

输出格式

输出满足条件的 u,vu, v 的对数,对 109+710^9+7 取模后的结果。

样例 1

输入

3

输出

5

样例 2

输入

1422

输出

52277

样例 3

输入

1000000000000000000

输出

787014179

说明/提示

限制

  • 1N10181 \leq N \leq 10^{18}

样例解释 1

可能的 u,vu, v 对有以下 55 种情况:

  • u=0,v=0u=0, v=0(取 a=0,b=0a=0, b=0,则 0xor0=00 \operatorname{xor} 0=00+0=00+0=0
  • u=0,v=2u=0, v=2(取 a=1,b=1a=1, b=1,则 1xor1=01 \operatorname{xor} 1=01+1=21+1=2
  • u=1,v=1u=1, v=1(取 a=1,b=0a=1, b=0,则 1xor0=11 \operatorname{xor} 0=11+0=11+0=1
  • u=2,v=2u=2, v=2(取 a=2,b=0a=2, b=0,则 2xor0=22 \operatorname{xor} 0=22+0=22+0=2
  • u=3,v=3u=3, v=3(取 a=3,b=0a=3, b=0,则 3xor0=33 \operatorname{xor} 0=33+0=33+0=3

由 ChatGPT 4.1 翻译