| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | func superPow(a int, b []int) int { // Recurse	n := len(b)	if n == 0 {		return 1	}	return modPow(superPow(a, b[:n-1]), 10) * modPow(a, b[n-1]) % 1337}func modPow(a, b int) (pow int) {	pow, a = 1, a%1337	for b != 0 {		if b&1 == 1 {			pow = pow * a % 1337		}		b >>= 1		a = a * a % 1337	}	return}func superPowFP(a int, b []int) int { // Fast power	pow, n, hi := 1, len(b), 0	a %= 1337	for !eq0(b, hi) {		if b[n-1]&1 == 1 {			pow = pow * a % 1337		}		div2(b, &hi)		a = a * a % 1337	}	return pow}func eq0(bn []int, hi int) bool {	for i := len(bn) - 1; hi <= i; i-- {		if bn[i] != 0 {			return false		}	}	return true}func div2(bn []int, hi *int) {	i := *hi	if bn[*hi] == 1 {		(*hi)++	}	n := len(bn)	for rem := 0; i < n; i++ {		num := bn[i] + rem*10		bn[i], rem = num>>1, num&1	}}
 |