#include <cstdio>
#include <algorithm>
using namespace std;
const int MAXN = 3000;
const int MOD = 998244353;
inline int add(int x, int y) {x += y; return x >= MOD ? x - MOD : x;}
inline int sub(int x, int y) {x -= y; return x < 0 ? x + MOD : x;}
inline int mul(int x, int y) {return (int)(1LL * x * y % MOD);}
int pow_mod(int b, int p) {
int ret = 1;
for(int i=p;i;i>>=1,b=mul(b,b))
if( i & 1 ) ret = mul(ret, b);
return ret;
}
int f[MAXN + 5][MAXN + 5], A, B, C, D;
int main() {
scanf("%d%d%d%d", &A, &B, &C, &D);
for(int i=A;i<=C;i++) {
int tmp = 0;
for(int j=B;j<=D;j++) {
if( i == A && j == B ) f[A][B] = 1;
else {
tmp = mul(add(tmp, f[i-1][j-1]), i - 1);
f[i][j] = add(tmp, mul(f[i-1][j], j));
}
}
}
int ans = 0;
for(int i=1;i<=D;i++)
ans = add(ans, mul(f[C][i], pow_mod(C, D - i)));
printf("%d\n", ans);
}