Problem:
Problem B : Grid

r × c の2次元グリッド上の２つの座標 (a1,a2) と (b1,b2) が与えられる。
あるマス (e,f) から (e+1,f)、(e-1,f)、(e,f+1)、(e,f-1) のどれかのマスに移動するコストを１とする。
また、(e,c-1) と (e,0)、(r-1,f) と (0,f) の間もコスト１で移動することができる。
この時に１つ目の座標から２つ目の座標へ最短コストで移動できる経路の数を求めよ。

Input

入力は以下のフォーマットで与えられる。

r c a1 a2 b1 b2

入力は以下の制約を満たす

1 ≤ r , c ≤ 1,000

0 ≤ a1 , b1 < r

0 ≤ a2 , b2 < c

Output

答えの値を100,000,007で割った余りを出力せよ。

Sample Input 1

4 4 0 0 3 3

Sample Output 1

2

Sample Input 2

4 4 0 0 1 1

Sample Output 2

2

Sample Input 3

2 3 0 0 1 2

Sample Output 3

4

Sample Input 4

500 500 0 0 200 200

Sample Output 4

34807775

Solution in Ruby (judge verdict: Accepted)

### constant

MOD = 100000007

### subroutines

def distnum(n, c1, c2)
  if c1 > c2
    t = c1; c1 = c2; c2 = t
  end
  dc0 = c2 - c1
  dc1 = n - c2 + c1
  [(dc0 < dc1) ? dc0 : dc1, (dc0 == dc1) ? 2 : 1]
end

def mulmod(a, b)
  (a * b) % MOD
end

def powmod(a, n)
  pm = 1
  while n > 0
    pm = mulmod(pm, a) if (n & 1) == 1
    a = mulmod(a, a)
    n >>= 1
  end
  pm
end

def invmod(a)
  powmod(a, MOD - 2)
end

### main

r, c, a1, a2, b1, b2 = gets.split.map(&:to_i)

da, na = distnum(r, a1, b1)
db, nb = distnum(c, a2, b2)
#p [da, na, db, nb]

dab = da + db

fracs = [1]
invfs = [1]

for k in (1..dab)
  fracs[k] = (fracs[k - 1] * k) % MOD
  invfs[k] = invmod(fracs[k])
end

comb = mulmod(mulmod(fracs[dab], invfs[da]), invfs[db])
comb = mulmod(mulmod(comb, na), nb)

puts comb