#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<ll, ll>
#define fi first
#define se second
using namespace std;
struct Node
{
int x, y, k;
ll dist;
Node(int x = 0, int y = 0, int k = 0, ll dist = 0) :
x(x), y(y), k(k), dist(dist) {};
bool operator > (const Node &other) const
{
return dist > other.dist;
}
};
struct Parent
{
int x, y, k, type;
Parent(int x = 0, int y = 0, int k = 0, int type = 0) :
x(x), y(y), k(k), type(type) {};
};
const int maxn = 1e2;
const ll INF = 1e18;
const int dx[4][4] =
{
{0, 1, 0, 0},
{1, 1, 0, 0},
{0, -1, 0, 0},
{-1, -1, 0, 0}
};
const int dy[4][4] =
{
{1, 1, 0, 0},
{0, -1, 0, 0},
{-1, -1, 0, 0},
{0, 1, 0, 0}
};
const int dk[4][4] =
{
{0, 0, 1, 3},
{1, 1, 2, 0},
{2, 2, 3, 1},
{3, 3, 0, 2}
};
int n, m, x, y, z, t;
Parent p[maxn + 10][maxn + 10][4];
ll w[4], d[maxn + 10][maxn + 10][4];
bool vis[maxn + 10][maxn + 10];
priority_queue<Node, vector<Node>, greater<Node>> pq;
vector<int> trace;
ii ans = {INF , INF};
bool in_matrix(int x, int y)
{
return x >= 1 && x <= n && y >= 1 && y <= m;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("FROBOT.INP", "r"))
{
freopen("FROBOT.INP", "r", stdin);
freopen("FROBOT.OUT", "w", stdout);
}
cin >> n >> m >> x >> y >> z >> t;
for (int i = 0; i < 4; i++)
cin >> w[i];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
char c;
cin >> c;
vis[i][j] = c - '0';
}
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
for (int k = 0; k < 4; k++)
d[i][j][k] = INF;
d[x][y][0] = 0;
pq.push(Node(x, y, 0, 0));
while (pq.size())
{
auto [x, y, k, dist] = pq.top();
pq.pop();
if (dist > d[x][y][k])
continue;
for (int i = 0; i < 4; i++)
{
int nx_x = x + dx[k][i];
int nx_y = y + dy[k][i];
int nx_k = dk[k][i];
if (!in_matrix(nx_x, nx_y) || vis[nx_x][nx_y])
continue;
if (d[nx_x][nx_y][nx_k] > d[x][y][k] + w[i])
{
d[nx_x][nx_y][nx_k] = d[x][y][k] + w[i];
p[nx_x][nx_y][nx_k] = Parent(x, y, k, i + 1);
pq.push(Node(nx_x, nx_y, nx_k, d[nx_x][nx_y][nx_k]));
}
}
}
for (int i = 0; i < 4; i++)
ans = min(ans, {d[z][t][i], i});
if (ans.fi == INF)
return cout << -1, 0;
int dir = ans.se;
while (z && t)
{
auto [x, y, k, type] = p[z][t][dir];
if (type)
trace.push_back(type);
z = x;
t = y;
dir = k;
}
reverse(trace.begin(), trace.end());
cout << ans.fi, el;
cout << trace.size(), el;
for (int x : trace)
cout << x << ' ';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8bGwsIGxsPgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE5vZGUKewogICAgaW50IHgsIHksIGs7CiAgICBsbCBkaXN0OwoKICAgIE5vZGUoaW50IHggPSAwLCBpbnQgeSA9IDAsIGludCBrID0gMCwgbGwgZGlzdCA9IDApIDoKICAgICAgICB4KHgpLCB5KHkpLCBrKGspLCBkaXN0KGRpc3QpIHt9OwogICAgYm9vbCBvcGVyYXRvciA+IChjb25zdCBOb2RlICZvdGhlcikgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gZGlzdCA+IG90aGVyLmRpc3Q7CiAgICB9Cn07CnN0cnVjdCBQYXJlbnQKewogICAgaW50IHgsIHksIGssIHR5cGU7CgogICAgUGFyZW50KGludCB4ID0gMCwgaW50IHkgPSAwLCBpbnQgayA9IDAsIGludCB0eXBlID0gMCkgOgogICAgICAgIHgoeCksIHkoeSksIGsoayksIHR5cGUodHlwZSkge307Cn07Cgpjb25zdCBpbnQgbWF4biA9IDFlMjsKY29uc3QgbGwgSU5GID0gMWUxODsKY29uc3QgaW50IGR4WzRdWzRdID0KewogICAgezAsIDEsIDAsIDB9LAogICAgezEsIDEsIDAsIDB9LAogICAgezAsIC0xLCAwLCAwfSwKICAgIHstMSwgLTEsIDAsIDB9Cn07CmNvbnN0IGludCBkeVs0XVs0XSA9CnsKICAgIHsxLCAxLCAwLCAwfSwKICAgIHswLCAtMSwgMCwgMH0sCiAgICB7LTEsIC0xLCAwLCAwfSwKICAgIHswLCAxLCAwLCAwfQp9Owpjb25zdCBpbnQgZGtbNF1bNF0gPQp7CiAgICB7MCwgMCwgMSwgM30sCiAgICB7MSwgMSwgMiwgMH0sCiAgICB7MiwgMiwgMywgMX0sCiAgICB7MywgMywgMCwgMn0KfTsKCmludCBuLCBtLCB4LCB5LCB6LCB0OwpQYXJlbnQgcFttYXhuICsgMTBdW21heG4gKyAxMF1bNF07CmxsIHdbNF0sIGRbbWF4biArIDEwXVttYXhuICsgMTBdWzRdOwpib29sIHZpc1ttYXhuICsgMTBdW21heG4gKyAxMF07CnByaW9yaXR5X3F1ZXVlPE5vZGUsIHZlY3RvcjxOb2RlPiwgZ3JlYXRlcjxOb2RlPj4gcHE7CnZlY3RvcjxpbnQ+IHRyYWNlOwppaSBhbnMgPSB7SU5GICwgSU5GfTsKCmJvb2wgaW5fbWF0cml4KGludCB4LCBpbnQgeSkKewogICAgcmV0dXJuIHggPj0gMSAmJiB4IDw9IG4gJiYgeSA+PSAxICYmIHkgPD0gbTsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGlmIChmb3BlbigiRlJPQk9ULklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiRlJPQk9ULklOUCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oIkZST0JPVC5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgY2luID4+IG4gPj4gbSA+PiB4ID4+IHkgPj4geiA+PiB0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgY2luID4+IHdbaV07CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgY2hhciBjOwogICAgICAgICAgICBjaW4gPj4gYzsKICAgICAgICAgICAgdmlzW2ldW2pdID0gYyAtICcwJzsKICAgICAgICB9CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKQogICAgICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7IGsrKykKICAgICAgICAgICAgICAgIGRbaV1bal1ba10gPSBJTkY7CiAgICBkW3hdW3ldWzBdID0gMDsKICAgIHBxLnB1c2goTm9kZSh4LCB5LCAwLCAwKSk7CiAgICB3aGlsZSAocHEuc2l6ZSgpKQogICAgewogICAgICAgIGF1dG8gW3gsIHksIGssIGRpc3RdID0gcHEudG9wKCk7CiAgICAgICAgcHEucG9wKCk7CiAgICAgICAgaWYgKGRpc3QgPiBkW3hdW3ldW2tdKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGludCBueF94ID0geCArIGR4W2tdW2ldOwogICAgICAgICAgICBpbnQgbnhfeSA9IHkgKyBkeVtrXVtpXTsKICAgICAgICAgICAgaW50IG54X2sgPSBka1trXVtpXTsKICAgICAgICAgICAgaWYgKCFpbl9tYXRyaXgobnhfeCwgbnhfeSkgfHwgdmlzW254X3hdW254X3ldKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGlmIChkW254X3hdW254X3ldW254X2tdID4gZFt4XVt5XVtrXSArIHdbaV0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGRbbnhfeF1bbnhfeV1bbnhfa10gPSBkW3hdW3ldW2tdICsgd1tpXTsKICAgICAgICAgICAgICAgIHBbbnhfeF1bbnhfeV1bbnhfa10gPSBQYXJlbnQoeCwgeSwgaywgaSArIDEpOwogICAgICAgICAgICAgICAgcHEucHVzaChOb2RlKG54X3gsIG54X3ksIG54X2ssIGRbbnhfeF1bbnhfeV1bbnhfa10pKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKQogICAgICAgIGFucyA9IG1pbihhbnMsIHtkW3pdW3RdW2ldLCBpfSk7CiAgICBpZiAoYW5zLmZpID09IElORikKICAgICAgICByZXR1cm4gY291dCA8PCAtMSwgMDsKICAgIGludCBkaXIgPSBhbnMuc2U7CiAgICB3aGlsZSAoeiAmJiB0KQogICAgewogICAgICAgIGF1dG8gW3gsIHksIGssIHR5cGVdID0gcFt6XVt0XVtkaXJdOwogICAgICAgIGlmICh0eXBlKQogICAgICAgICAgICB0cmFjZS5wdXNoX2JhY2sodHlwZSk7CiAgICAgICAgeiA9IHg7CiAgICAgICAgdCA9IHk7CiAgICAgICAgZGlyID0gazsKICAgIH0KICAgIHJldmVyc2UodHJhY2UuYmVnaW4oKSwgdHJhY2UuZW5kKCkpOwogICAgY291dCA8PCBhbnMuZmksIGVsOwogICAgY291dCA8PCB0cmFjZS5zaXplKCksIGVsOwogICAgZm9yIChpbnQgeCA6IHRyYWNlKQogICAgICAgIGNvdXQgPDwgeCA8PCAnICc7Cn0K