#3547. K说真话

K说真话

问题描述

线段树是小LL最喜欢的数据结构,它能高效地解决许多实际问题。

给定一个正整数nn,小LL构建出一棵下标属于整数区间[1,n][1,n]的线段树:

  • 初始线段树只有一个结点[1,n][1,n]
  • 对于结点[L,R][L,R],若L<RL<R,则令mid=[L+R2]mid=[\frac{L+R}{2}][x][x]表示不超过xx的最大整数),小LL对这个结点建出两个子结点[L,mid][L,mid][mid+1,R][mid+1,R]

LL定义了一个函数cover(a,b)(1abn)cover(a,b)(1\leq a\leq b\leq n),表示用若干个线段树结点不重不漏地覆盖区间[a,b][a,b],则使用的线段树结点个数的最小值。

LL尝试使用这棵线段树解决某个复杂问题,并想要粗略地评估这棵线段树的性能。

具体来说,区间[1,n][1,n]n(n+1)2\frac{n(n+1)}{2}个不同的子区间,如果小LL从这n(n+1)2\frac{n(n+1)}{2}个子区间中等概率随机地选取一个,将其记为[A,B][A,B],则小LL认为cover(A,B)cover(A,B)的期望值可用于评估此线段树的性能。

LL想请你帮他计算出cover(A,B)cover(A,B)的期望值与n(n+1)2\frac{n(n+1)}{2}的乘积对1,000,000,0071,000,000,007取模的结果,可以发现此结果一定是一个整数。

输入格式

第一行一个正整数T(1T1000)T(1\leq T\leq 1000)表示数据组数。

接下来TT行,其中第i(1iT)i(1\leq i\leq T)行一个正整数n(1n1018)n(1\leq n\leq 10^{18})表示第ii组数据。

输出格式

TT行,第i(1iT)i(1\leq i\leq T)行一个整数表示第ii组数据的答案。

1
3
7

样例解释

cover(1,1)=1cover(1,1)=1cover(2,2)=1cover(2,2)=1cover(3,3)=1cover(3,3)=1cover(1,2)=1cover(1,2)=1cover(2,3)=2cover(2,3)=2cover(1,3)=1cover(1,3)=1,故cover(A,B)cover(A,B)的期望=1+1+1+1+2+16=76=\frac{1+1+1+1+2+1}{6}=\frac{7}{6}