For problem statement at 0-999/500-599/550-559/551/problemD.txt this is a correct solution, but verifier at 0-999/500-599/550-559/551/verifierD.go ends with All 100 tests passed can you fix the verifier? ```go
package main
import (
"fmt"
)
func main() {
var n, k, l, m int64
fmt.Scan(&n, &k, &l, &m)
if m == 1 {
fmt.Println(0)
return
}
if l < 64 && k >= (int64(1)<<l) {
fmt.Println(0)
return
}
f0 := fib(n+2, m)
pow2n := modPow(2, n, m)
f1 := pow2n - f0
if f1 < 0 {
f1 += m
}
var ones int64
for i := int64(0); i < l; i++ {
if (k>>i)&1 == 1 {
ones++
}
}
zeros := l - ones
ans := modPow(f0, zeros, m)
ans = (ans * modPow(f1, ones, m)) % m
fmt.Println(ans)
}
func modPow(base, exp, mod int64) int64 {
res := int64(1)
base %= mod
for exp > 0 {
if exp&1 == 1 {
res = (res * base) % mod
}
base = (base * base) % mod
exp >>= 1
}
return res
}
func fib(n, mod int64) int64 {
return fibPair(n, mod)[0]
}
func fibPair(n, mod int64) [2]int64 {
if n == 0 {
return [2]int64{0, 1}
}
p := fibPair(n>>1, mod)
a, b := p[0], p[1]
c := (a * ((2*b%mod - a + mod) % mod)) % mod
d := (a*a%mod + b*b%mod) % mod
if n&1 == 0 {
return [2]int64{c, d}
}
return [2]int64{d, (c + d) % mod}
}
```