#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
using namespace std;
#define inf 100000000


void U(int *nx,int *now)
{
    nx[1]=now[2];
    nx[2]=7-now[1];
    nx[3]=now[3];
}

void D(int *nx,int *now)
{
    nx[1]=7-now[2];
    nx[2]=now[1];
    nx[3]=now[3];
}

void L(int *nx,int *now)
{
    nx[1]=now[3];
    nx[2]=now[2];
    nx[3]=7-now[1];
}

void R(int *nx,int *now)
{
    nx[1]=7-now[3];
    nx[2]=now[2];
    nx[3]=now[1];
}


int n,m;
int a[12][12];
int qx[500000],qy[500000];
int q1[500000],q2[500000],q3[500000];
int dis[12][12][10][10][10];
int t[12][12][10][10][10];
int now[7],nx[7];
int sx,sy,tx,ty;

int main()
{
  //  freopen("in.txt","r",stdin);
    cin>>n>>m;
    for (int i=0;i<=11;i++)
        for (int j=0;j<=11;j++)
            for (int i1=0;i1<=7;i1++)
            for (int i2=0;i2<=7;i2++)
            for (int i3=0;i3<=7;i3++)
            dis[i][j][i1][i2][i3]=inf;
    memset(t,0,sizeof(t));
    while (n+m!=0)
    {
        for (int k=1;k<=n;k++)
            for (int j=1;j<=m;j++)
                scanf("%d",&a[k][j]);
        cin>>sx>>sy>>tx>>ty;
        sx++;sy++;tx++;ty++;
        int head=1;
        int tail=1;
        q1[1]=1;
        q2[1]=2;
        q3[1]=3;
        qx[1]=sx;
        qy[1]=sy;
        dis[sx][sy][1][2][3]=0;
        while (head<=tail)
        {
            now[1]=q1[head];
            now[2]=q2[head];
            now[3]=q3[head];
            int x,y;
            x=qx[head],y=qy[head];
            head++;
            t[x][y][now[1]][now[2]][now[3]]=0;
            int DIS=dis[x][y][now[1]][now[2]][now[3]];
            if (x>1)
            {
                U(nx,now);
                int &nx_dis=dis[x-1][y][nx[1]][nx[2]][nx[3]];
                int &nx_t=t[x-1][y][nx[1]][nx[2]][nx[3]];
                int temp=DIS+a[x-1][y]*(7-nx[1]);
                if (temp<nx_dis)
                {
                    nx_dis=temp;
                    if (!nx_t)
                    {
                        nx_t=1;
                        qx[++tail]=x-1;
                        qy[tail]=y;
                        q1[tail]=nx[1];
                        q2[tail]=nx[2];
                        q3[tail]=nx[3];
                    }
                }
            }
            if (x<n)
            {
                D(nx,now);
                int &nx_dis=dis[x+1][y][nx[1]][nx[2]][nx[3]];
                int &nx_t=t[x+1][y][nx[1]][nx[2]][nx[3]];
                int temp=DIS+a[x+1][y]*(7-nx[1]);
                if (temp<nx_dis)
                {
                    nx_dis=temp;
                    if (!nx_t)
                    {
                        nx_t=1;
                        qx[++tail]=x+1;
                        qy[tail]=y;
                        q1[tail]=nx[1];
                        q2[tail]=nx[2];
                        q3[tail]=nx[3];
                    }
                }
            }
            if (y>1)
            {
                L(nx,now);
                int &nx_dis=dis[x][y-1][nx[1]][nx[2]][nx[3]];
                int &nx_t=t[x][y-1][nx[1]][nx[2]][nx[3]];
                int temp=DIS+a[x][y-1]*(7-nx[1]);
                if (temp<nx_dis)
                {
                    nx_dis=temp;
                    if (!nx_t)
                    {
                        nx_t=1;
                        qx[++tail]=x;
                        qy[tail]=y-1;
                        q1[tail]=nx[1];
                        q2[tail]=nx[2];
                        q3[tail]=nx[3];
                    }
                }
            }
            if (y<m)
            {
                R(nx,now);
                int &nx_dis=dis[x][y+1][nx[1]][nx[2]][nx[3]];
                int &nx_t=t[x][y+1][nx[1]][nx[2]][nx[3]];
                int temp=DIS+a[x][y+1]*(7-nx[1]);
                if (temp<nx_dis)
                {
                    nx_dis=temp;
                    if (!nx_t)
                    {
                        nx_t=1;
                        qx[++tail]=x;
                        qy[tail]=y+1;
                        q1[tail]=nx[1];
                        q2[tail]=nx[2];
                        q3[tail]=nx[3];
                    }
                }
            }
        }
        int ans=inf;
        for (int i=1;i<7;i++)
            for (int j=1;j<7;j++)
                for (int k=1;k<7;k++)
                    ans=min(ans,dis[tx][ty][i][j][k]);



        for (int k=1;k<=tail;k++)
            dis[qx[k]][qy[k]][q1[k]][q2[k]][q3[k]]=inf;

        cout<<ans<<endl;

        cin>>n>>m;
    }


    return 0;
}

Measured memory_bytes: 10592