← Home
```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)
	}
}
```