MOD =pow(10,9)+7defmultiply(arr1, arr2):
arr =[[0,0],[0,0]]for i inrange(2):for j inrange(2):
arr[i][j]= arr1[i][0]* arr2[0][j]+ arr1[i][1]* arr2[1][j]if arr[i][j]>= MOD:# 存在负数取余数问题
arr[i][j]%= MOD
return arr
defqpow(Mat, n):# 计算 Mat 矩阵的 n 次方
ans =[[1,0],[0,1]]# 单位阵while n >0:if n &1==1:# 累积
ans = multiply(ans, Mat)
Mat = multiply(Mat, Mat)# 倍增
n >>=1return ans
T =int(input())for _ inrange(T):
n, k =map(int,input().split())
temp = qpow([[k,-1],[1,0]], n -1)print((temp[0][0]* k + temp[0][1]*2)% MOD)
MOD =pow(10,9)+7defmultiply(arr1, arr2):
arr =[[0,0],[0,0]]for i inrange(2):for j inrange(2):
arr[i][j]= arr1[i][0]* arr2[0][j]+ arr1[i][1]* arr2[1][j]if arr[i][j]>= MOD:# 存在负数取余数问题
arr[i][j]%= MOD
return arr
defqpow(Mat, n):# 计算 Mat 矩阵的 n 次方
ans =[[1,0],[0,1]]# 单位阵while n >0:if n &1==1:# 累积
ans = multiply(ans, Mat)
Mat = multiply(Mat, Mat)# 倍增
n >>=1return ans
T =int(input())for _ inrange(T):
n, k =map(int,input().split())
temp = qpow([[k,-1],[1,0]], n -1)print((temp[0][0]* k + temp[0][1]*2)% MOD)