```go
package main
import "fmt"
const MOD int64 = 1000000007
func modpow(base, exp, mod int64) int64 {
res := int64(1)
for exp > 0 {
if exp%2 == 1 {
res = res * base % mod
}
base = base * base % mod
exp /= 2
}
return res
}
func main() {
var t int
fmt.Scan(&t)
for i := 0; i < t; i++ {
var n, k int64
fmt.Scan(&n, &k)
tpow := modpow(2, n, MOD)
half := modpow(2, n-1, MOD)
var sub int64
if n%2 == 0 {
sub = 1
} else {
sub = 0
}
w00 := (half - sub + MOD) % MOD
var w10 int64
if n%2 == 0 {
w10 = 1
} else {
w10 = 0
}
var w11 int64
if n%2 == 1 {
w11 = 1
} else {
w11 = 0
}
eq_coeff := (w00 + w11) % MOD
gt_coeff := w10
fe := int64(1)
fg := int64(1)
for r := int64(1); r <= k; r++ {
new_fg := (tpow * fg) % MOD
new_fe := ((eq_coeff * fe) % MOD + (gt_coeff * fg) % MOD) % MOD
fg = new_fg
fe = new_fe
}
fmt.Println(fe)
}
}
```