#include <bits/stdc++.h>
#define mod (100000007)
using namespace std;
typedef long long ll;
struct po{ll x,y;};
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
ll w,h,a1,a2,b1,b2;

void Add(ll &a,ll b){a=(a+b)%mod;}

po D[1001][1001];
ll bfs(po s,po g){
  for(int i=0;i<1001;i++)
    for(int j=0;j<1001;j++) D[i][j]=(po){-1,0};
  
  queue<po> Q;
  Q.push(s);
  D[s.y][s.x]=(po){0,1};
  

  while(!Q.empty()){
    po t=Q.front();Q.pop();

    for(int i=0;i<4;i++){
      int nx=(w+t.x+dx[i])%w;
      int ny=(h+t.y+dy[i])%h;
      if(D[ny][nx].x==D[t.y][t.x].x+1)Add(D[ny][nx].y,D[t.y][t.x].y);
      else if(D[ny][nx].x==-1){
	D[ny][nx]=D[t.y][t.x];
	D[ny][nx].x++;
	Q.push((po){nx,ny});
      }
    }    
  }
  return D[g.y][g.x].y%mod;
}


int main(){
  cin>>w>>h>>a1>>a2>>b1>>b2;
  cout<<bfs((po){a1,a2},(po){b1,b2})<<endl;;
}