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)

r, c, a1, a2, b1, b2 = gets.chomp.split.map(&:to_i)
result = 1
if a1 == b1
    result = 2 if (a2 - b2).abs == c - (a2 - b2).abs
else
    if a2 == b2
        result = 2 if (a1 - b1).abs == r - (a1 - b1).abs
    else
        x1, x2 = [a2, b2].minmax
        y1, y2 = [a1, b1].minmax
        arr = [[x2 - x1, y2 - y1], [c + x1 - x2, y2 - y1], [x2 - x1, r + y1 - y2], [c + x1 - x2, r + y1 - y2]]
        min = nil
        arr.each{|x, y| min = x + y if min.nil? || min > x + y}
        result = 0
        arr.each{|x, y|
            next if x + y != min
            z = 1
            a, b = [x, y].minmax
            a.times{|i| z *= (a + b - i)}
            a.times{|i| z /= (i + 1)}
            result += z
        }
    end
end
puts result % 100_000_007