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 Python3 (judge verdict: Accepted)

# Edit: 2014/09/09
# Lang: Python3
# Time: .00s

from math import factorial

if __name__ == "__main__":
    # a, b, c, d, e, f = map(int, input().strip("\n").split(" "))
    r, c, ar, ac, br, bc = map(int, input().strip("\n").split(" "))
    maxans = 100000007  # 100,000,007
    # maxn =   100000007

    # tate Row
    dr = min(abs(br - ar), r - abs(br - ar))
    if 2 * dr == r:
        gainr = 2
    else:
        gainr = 1

    # yoko Column
    dc = min(abs(bc - ac), c - abs(bc - ac))
    if 2 * dc == c:
        gainc = 2
    else:
        gainc = 1

    #dr = int(dr)
    #dc = int(dc)
    #gainr = int(gainr)
    #gainc = int(gainc)

    # print(dr, dc)
    # print(gainr, gainc)

    ans1 = factorial(dr+dc)
    #print("ans1",ans1)
    #print("type",type(ans1))

    ans2 = factorial(dr)
    #print("ans2",ans2)
    #print("type",type(ans2))

    ans3 = factorial(dc)
    #print("ans3",ans3)
    #print("type",type(ans3))

    ans4 = ans1//ans2//ans3*gainr*gainc
    #print("ans4",ans4)
    #print("type",type(ans4))

    ans = ans4
    ## ans = factorial(dr + dc) / factorial(dr) / factorial(dc) # * gainr * gainc
    # python overflow error integer division result too large for a float

    #ans = factorial(dr + dc) // factorial(dr) // factorial(dc) * gainr * gainc


    # t = 1
    #for i in range(dr, dr + dc):
    #print(t)
    #    t *= i
    #ans = t / factorial(dc) * gainr * gainc

    #print(ans)
    #print(ans, type(ans))
    print(ans % maxans)

    # print("34807775")
    #67,352,549