#include <bits/stdc++.h>
using namespace std;
long long int mod = 998244353;
long long int dx[] = {0, 0, 1, -1};
long long int dy[] = {1, -1, 0, 0};
long long int m = 0, n, res = 0, k, ans;
string s2, ch = "", s, t, s1 = "";
vector<pair<string, long long int> > vm;
vector<pair<pair<long long int, long long int>, long long int> > vvv;
vector<pair<long long int, long long int> > vv;
vector<pair<string, long long int> > vv2;
vector<long long int> v[500005];
long long int a[200005], dp[200005], centerparent[200005];
long long int pow(long long int a, long long int b, long long int mod) {
  if (b == 0)
    return 1;
  else if (b % 2 == 0)
    return pow(a * a % mod, b / 2, mod);
  else
    return pow(a, b - 1, mod) * a % mod;
}
long long int modularExponentiation(long long int x, long long int n,
                                    long long int M) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return modularExponentiation((x * x) % M, n / 2, M);
  else
    return (x * modularExponentiation((x * x) % M, (n - 1) / 2, M)) % M;
}
long long int modInverse(long long int A, long long int M) {
  return modularExponentiation(A, M - 2, M);
}
int main() {
  ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  long long int i = 0, x = 0, z = 0, y = 0, j = 0, q, mx = 0, idx = 0, ok = 0,
                l = 0, r = 0, negatif = 0, positif = 0, r1, d, p;
  set<long long int>::iterator it;
  multiset<long long int>::iterator its;
  cin >> n >> m >> l >> r;
  k = n * m;
  if (k & 1) {
    p = r - l + 1;
    return cout << pow(p, k, mod), 0;
  }
  long long int even = (r - l) / 2 + 1;
  long long int odd = (r - l + 1) - even;
  ans = pow((even + odd) % mod, k, mod);
  ans = (ans + pow((even - odd + 2 * mod) % mod, k, mod) + mod) % mod;
  ans *= modInverse(2, mod);
  ans = (ans + mod) % mod;
  cout << ans;
  return 0;
}
