Snuke has N dogs and M monkeys. He wants them to line up in a row.

As a Japanese saying goes, these dogs and monkeys are on bad terms. ("ken'en no naka", literally "the relationship of dogs and monkeys", means a relationship of mutual hatred.) Snuke is trying to reconsile them, by arranging the animals so that there are neither two adjacent dogs nor two adjacent monkeys.

How many such arrangements there are? Find the count modulo 10^9+7 (since animals cannot understand numbers larger than that). Here, dogs and monkeys are both distinguishable. Also, two arrangements that result from reversing each other are distinguished.

Constraints

* 1 ≤ N,M ≤ 10^5

Input

Input is given from Standard Input in the following format:


N M


Output

Print the number of possible arrangements, modulo 10^9+7.

Examples

Input

2 2


Output

8


Input

3 2


Output

12


Input

1 8


Output

0


Input

100000 100000


Output

530123477
import math
N,M=map(int,input().split())
reg=10**9+7

#犬と猿が隣合わない並び方*Nの階乗*Mの階乗(並べ方を順列で表現）
#入力例1
#犬と猿の数が同じ場合
#犬猿犬猿,猿犬猿犬の２通り*2の階乗*2の階乗
#どちらかが１匹多い場合
#入力例2
#犬猿犬猿犬の1通り*3の階乗*2の階乗

#ここでどちらか一方の数が他方より２以上多い場合を考えると題を満たす並べ方はない

if abs(N-M)>=2:
  print(0)
  exit()
fact=((math.factorial(N)%reg)*(math.factorial(M)%reg))%reg
if abs(N-M)==1:
  print(fact)
else:
  print((2*fact)%reg)