← Home
 ```go
package main

import (
	"bufio"
	"fmt"
	"os"
)

const mod int64 = 998244353
const inv2 int64 = (mod + 1) / 2

func pow(a, b int64) int64 {
	res := int64(1)
	a %= mod
	for b > 0 {
		if b&1 == 1 {
			res = res * a % mod
		}
		a = a * a % mod
		b >>= 1
	}
	return res
}

func main() {
	in := bufio.NewReader(os.Stdin)
	var n, m, L, R int64
	fmt.Fscan(in, &n, &m, &L, &R)
	
	N := R - L + 1
	E := R/int64(2) - (L-int64(1))/int64(2)
	diff := (2*E - N) % mod
	if diff < 0 {
		diff += mod
	}
	
	nm := n * m
	if nm%2 == 1 {
		fmt.Println(pow(N%mod, nm))
	} else {
		term1 := pow(N%mod, nm)
		term2 := pow(diff, nm)
		ans := (term1 + term2) % mod * inv2 % mod
		fmt.Println(ans)
	}
}
```