Problem:
 Score : 2000 points    Problem Statement You are participating in a quiz with N + M questions and Yes/No answers.  It's known in advance that there are N questions with answer Yes and M questions with answer No, but the questions are given to you in random order.  You have no idea about correct answers to any of the questions.
You answer questions one by one, and for each question you answer, you get to know the correct answer immediately after answering.  Suppose you follow a strategy maximizing the expected number of correct answers you give.  Let this expected number be P/Q , an irreducible fraction. Let M = 998244353 .
It can be proven that a unique integer R between 0 and M - 1 exists such that P = Q \times R modulo M ,
and it is equal to P \times Q^{-1} modulo M , where Q^{-1} is the modular inverse of Q .
Find R .      Constraints  1 \leq N, M \leq 500,000  Both N and M are integers.       Partial Score  1500 points will be awarded for passing the testset satisfying N = M and 1 \leq N, M \leq 10^5 .         Input Input is given from Standard Input in the following format:  N  M       Output Let P/Q be the expected number of correct answers you give if you follow an optimal strategy, represented as an irreducible fraction.
Print P \times Q^{-1} modulo 998244353 .        Sample Input 1 1 1      Sample Output 1 499122178  There are two questions.
You may answer randomly to the first question, and you'll succeed with 50% probability.
Then, since you know the second answer is different from the first one, you'll succeed with 100% probability.  The expected number of your correct answers is 3 / 2 .
Thus, P = 3 , Q = 2 , Q^{-1} = 499122177 (modulo 998244353 ), and P \times Q^{-1} = 499122178 (again, modulo 998244353 ).       Sample Input 2 2 2      Sample Output 2 831870297  The expected number of your correct answers is 17 / 6 .       Sample Input 3 3 4      Sample Output 3 770074220  The expected number of your correct answers is 169 / 35 .       Sample Input 4 10 10      Sample Output 4 208827570       Sample Input 5 42 23      Sample Output 5 362936761

Solution (Python):
M=8**7
m,f,g,i=M*476+1,[j:=1],[k:=1]*M,0
while i<M:i+=1;f+=f[-1]*i%m,
g+=pow(f[-1],m-2,m),
while i:g[i-1]=g[i]*i%m;i-=1
A,B=map(int,input().split())
if A<B:A,B=B,A
while j<=B:i+=k*f[A+B-j]*g[B-j];k=k*2%m;j+=1
print((i*f[B]*g[A+B]+A)%m)

Solution (Python):
M=8**7
m,f,g,i=M*476+1,[j:=1],[k:=1]*M,1
while i<M:f+=f[-1]*i%m,;i+=1
g+=pow(M*f[-1],m-2,m),
while i:g[i-1]=g[i]*i%m;i-=1
A,B=map(int,input().split())
if A<B:A,B=B,A
while j<=B:i+=k*f[A+B-j]*g[B-j];k=k*2%m;j+=1
print((i*f[B]*g[A+B]+A)%m)

Solution (Python):
M=8**7
m,f,g,i,a,b=M*476+1,[1],[1]*M,1,0,1
while i<M:f+=f[-1]*i%m,;i+=1
g[-1]=pow(f[-1],m-2,m)
while i>1:i-=1;g[i-1]=g[i]*i%m
A,B=map(int,input().split())
if A<B:A,B=B,A
while i<=B:a+=b*f[A+B-i]*g[B-i];b=b*2%m;i+=1
print((a*f[B]*g[A+B]+A)%m)

Solution (Python):
M=8**7
m=M*476+1
f=[1]*M
g=[1]*M
h=[1]*M
i=2
while i<M:f[i],h[i]=f[i-1]*i%m,-h[m%i]*(m//i)%m;g[i]=g[i-1]*h[i]%m;i+=1
a=0
b=j=1
A,B=map(int,input().split())
if A<B:A,B=B,A
while j<=B:a+=b*f[A+B-j]*g[B-j];b=b*2%m;j+=1
print((a*f[B]*g[A+B]+A)%m)

Solution (Python):
M=8**7
m=M*476+1
f=[1]*M
g=[1]*M
h=[1]*M
i=2
while i<M:f[i]=f[i-1]*i%m;h[i]=-h[m%i]*(m//i)%m;g[i]=g[i-1]*h[i]%m;i+=1
a=0
b=j=1
A,B=map(int,input().split())
if A<B:A,B=B,A
while j<=B:a+=b*f[A+B-j]*g[B-j];b=b*2%m;j+=1
print((a*f[B]*g[A+B]+A)%m)

Solution (Python):
M=8**7
m=M*476+1
f=[1]*M
g=[1]*M
h=[1]*M
for i in range(2,M):
	f[i]=f[i-1]*i%m
	h[i]=-h[m%i]*(m//i)%m
	g[i]=g[i-1]*h[i]%m
A,B=map(int,input().split())
if A<B:A,B=B,A
a=0
b=1
for j in range(1,B+1):
	a+=b*f[A+B-j]*g[B-j]
	b=b*2%m
print((a*f[B]*g[A+B]+A)%m)

Solution (Python):
m=998244353
M=6**8
f=[1]*M
g=[1]*M
h=[1]*M
h[0]=0
for i in range(2,M):
	f[i]=f[i-1]*i%m
	h[i]=m-h[m%i]*(m//i)%m
	g[i]=g[i-1]*h[i]%m
A,B=map(int,input().split())
if A<B:A,B=B,A
a=0
b=1
for j in range(1,B+1):
	a+=b*f[A+B-j]*g[B-j]
	b=b*2%m
print((a*f[B]*g[A+B]+A)%m)

Solution (Python):
m=998244353
M=1<<20
f=[1]*M
g=[1]*M
h=[1]*M
h[0]=0
for i in range(2,M):
	f[i]=f[i-1]*i%m
	h[i]=m-h[m%i]*(m//i)%m
	g[i]=g[i-1]*h[i]%m
A,B=map(int,input().split())
if A<B:A,B=B,A
a=0
b=1
for j in range(1,B+1):
	a+=b*f[A+B-j]*g[B-j]*g[A]
	b=b*2%m
print((a*f[A]*f[B]*g[A+B]+A)%m)

Solution (Python):
m=998244353
M=1<<20
f=[0]*M
g=[0]*M
h=[0]*M
f[0]=g[0]=f[1]=g[1]=h[1]=1
for i in range(2,M):
	f[i]=f[i-1]*i%m
	h[i]=m-h[m%i]*(m//i)%m
	g[i]=g[i-1]*h[i]%m
A,B=map(int,input().split())
if A<B:A,B=B,A
a=0
b=1
for j in range(1,B+1):
	a+=b*f[A+B-j]*g[B-j]*g[A]
	b=b*2%m
print((a*f[A]*f[B]*g[A+B]+A)%m)

Solution (Python):
m=998244353
M=1<<20
f=[0]*M
g=[0]*M
h=[0]*M
f[0]=g[0]=f[1]=g[1]=h[1]=1
for i in range(2,M):
	f[i]=f[i-1]*i%m
	h[i]=m-h[m%i]*(m//i)%m
	g[i]=g[i-1]*h[i]%m
A,B=map(int,input().split())
if A<B:
	A,B=B,A
b=1
a=0
for j in range(1,B+1):
	a+=b*f[A+B-j]*g[B-j]*g[A]
	b=b*2%m
print((a*f[A]*f[B]*g[A+B]+A)%m)

Solution (Python):
m=998244353
M=1000001
f=[0]*M
g=[0]*M
h=[0]*M
f[0]=g[0]=f[1]=g[1]=h[1]=1
for i in range(2,M):
	f[i]=f[i-1]*i%m
	h[i]=m-h[m%i]*(m//i)%m
	g[i]=g[i-1]*h[i]%m
A,B=map(int,input().split())
if A<B:
	A,B=B,A
b=1
a=0
for j in range(1,B+1):
	a+=b*f[A+B-j]*g[B-j]*g[A]
	b=b*2%m
a=a*f[A]*f[B]*g[A+B]+A
print(a%m)

Solution (Python):
m=998244353
M=1000001
f=[0]*M
g=[0]*M
h=[0]*M
f[0]=g[0]=f[1]=g[1]=h[1]=1
for i in range(2,M):
	f[i]=f[i-1]*i%m
	h[i]=m-h[m%i]*(m//i)%m
	g[i]=g[i-1]*h[i]%m
A,B=map(int,input().split())
if A<B:
	A,B=B,A
b=1
ans=0
for j in range(1,B+1):
	ans+=b*f[A+B-j]*g[B-j]*g[A]%m
	b=b*2%m
ans=ans*f[A]*f[B]*g[A+B]+A
print(ans%m)