/*
结论:可以同时改变任意两个块的奇偶性
所以如果n*m是奇数,那么初始状态无论如何设置都可以
n*m是偶数: 初始状态必须有偶数个偶数|偶数个奇数,求的时候用二项式反演一下即可
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
ll Pow(ll a,ll b){
ll res=1;
while(b){
if(b%2)res=res*a%mod;
b>>=1;a=a*a%mod;
}
return res;
}
int main(){
ll n,m,L,R;
cin>>n>>m>>L>>R;
if(n*m%2==0){
ll ans=0,odd,even;
if(L%2==0){
odd=(R-L+1)/2;
even=R-L+1-odd;
}else {
even=(R-L+1)/2;
odd=R-L+1-even;
}
if(odd==0 || even==0)ans=1;
else {
ll sum=Pow(odd+even,n*m);
ll dif=Pow(odd-even,n*m);
ans=(sum+dif)*Pow(2,mod-2)%mod;
}
cout<<ans<<'\n';
}else {
cout<<Pow(R-L+1,n*m)<<'\n';
}
}