import java.util.*;
import java.math.*;
import java.io.*;
import java.text.*;
public class Grasshop {
static int xspan, yspan, pos, x0, y0, xt, yt, steps;
static ArrayList<int[]> nodes = new ArrayList<int[]>();
static ArrayList<int[]> newnodes = new ArrayList<int[]>();
static boolean[][] visited = new boolean[101][101];
static boolean foundEnd = false;
static void examineOutnodes(int x, int y){
int xnew, ynew;
// A
xnew = x-2;
ynew = y+1;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
// A
xnew = x+2;
ynew = y+1;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
// B
xnew = x-2;
ynew = y-1;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
// B
xnew = x+2;
ynew = y-1;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
// C
xnew = x-1;
ynew = y+2;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
// C
xnew = x-1;
ynew = y-2;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
// D
xnew = x+1;
ynew = y+2;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
// D
xnew = x+1;
ynew = y-2;
if(valid(xnew,ynew) && !visited[xnew][ynew]){
newnodes.add(new int[]{xnew,ynew});
visited[xnew][ynew]=true;
if(xnew==xt && ynew==yt) {
foundEnd=true;
return;
}
}
}
static void findWay(){
nodes.clear();
newnodes.clear();
// end == start
if(xt==x0 && yt==y0){
steps=0;
return;
}
if(!valid(xt,yt) || !valid(x0,y0)){
steps=-1;
return;
}
visited[x0][y0] = true;
nodes.add(new int[]{x0,y0});
while(foundEnd==false && !nodes.isEmpty()){
steps++;
for(int[] node : nodes){
examineOutnodes(node[0],node[1]);
}
nodes.clear();
nodes.addAll(newnodes);
newnodes.clear();
}
if(!foundEnd) steps=-1;
return;
}
static boolean valid(int x, int y){
return (x>=1 && x<=xspan && y>=1 && y<=yspan);
}
/**
* @param args the command line arguments
*/
while( (line=br.readLine()) != null) {
xspan
= Integer.
valueOf(st.
nextToken()); yspan
= Integer.
valueOf(st.
nextToken()); x0
= Integer.
valueOf(st.
nextToken()); y0
= Integer.
valueOf(st.
nextToken()); xt
= Integer.
valueOf(st.
nextToken()); yt
= Integer.
valueOf(st.
nextToken());
// nulovani
for(int xi=1;xi<=xspan;xi++){
for(int yi=1;yi<yspan;yi++){
visited[xi][yi] = false;
}
}
foundEnd = false;
steps = 0;
findWay();
if(steps==-1)
System.
out.
println("impossible"); else
}
}
}