116AC - ABC065C: Reconciled?

ABC065-C (300 points)
問題

犬が  N 匹, 猿が  M 匹いるとき, 犬同士, 猿同士が隣り合わない並べ方の総数を求める. ただし, 犬同士, また猿同士は互いに区別する.

  •  1 \leq N, M \leq 10^5
方針
  • 犬同士, 猿同士が隣り合わないように並べられる ⇔ 犬の数と猿の数の違いが  1 以内である
  • あとはただの順列の数え上げ.
import math

# input
N, M = map(int, input().split())

if abs(N - M) >= 2:
    print(0)
elif abs(N - M) == 1:
    ans = (math.factorial(N) * math.factorial(M)) % (10 ** 9 + 7)
    print(ans)
else:
    ans = (math.factorial(N) * math.factorial(M) * 2) % (10 ** 9 + 7)
    print(ans)