#include <bits/stdc++.h>
using namespace std;
int n, m;
int used[1100][1100];
vector<pair<int, int> > solve_l_r(int sx, int sy, int fx, int fy) {
  vector<pair<int, int> > ret;
  int len = abs(sx - fx) + 1;
  if ((fy - sy + 1) % 2 == 1) {
    int curx = sx, cury = sy;
    for (int i = 1; i <= fy - sy + 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          curx--;
        else
          curx++;
      }
      ret.push_back(make_pair(curx, cury));
      cury++;
    }
  } else {
    int curx = sx, cury = sy;
    for (int i = 1; i <= fy - sy - 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          curx--;
        else
          curx++;
      }
      ret.push_back(make_pair(curx, cury));
      cury++;
    }
    for (int i = 1; i <= len - 1; i++) {
      ret.push_back(make_pair(curx, cury));
      if (i % 2 == 0)
        cury--;
      else
        cury++;
      ret.push_back(make_pair(curx, cury));
      curx++;
    }
    if (curx == fx && cury == fy)
      ret.push_back(make_pair(curx, cury));
    else
      ret.push_back(make_pair(curx, cury)), ret.push_back(make_pair(fx, fy));
  }
  return ret;
}
vector<pair<int, int> > solve_r_l(int sx, int sy, int fx, int fy) {
  vector<pair<int, int> > ret;
  int len = abs(sx - fx) + 1;
  if ((sy - fy + 1) % 2 == 1) {
    int curx = sx, cury = sy;
    for (int i = 1; i <= sy - fy + 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          curx--;
        else
          curx++;
      }
      ret.push_back(make_pair(curx, cury));
      cury--;
    }
  } else {
    int curx = sx, cury = sy;
    for (int i = 1; i <= sy - fy - 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          curx--;
        else
          curx++;
      }
      ret.push_back(make_pair(curx, cury));
      cury--;
    }
    for (int i = 1; i <= len - 1; i++) {
      ret.push_back(make_pair(curx, cury));
      if (i % 2 == 0)
        cury++;
      else
        cury--;
      ret.push_back(make_pair(curx, cury));
      curx++;
    }
    if (curx == fx && cury == fy)
      ret.push_back(make_pair(curx, cury));
    else
      ret.push_back(make_pair(curx, cury)), ret.push_back(make_pair(fx, fy));
  }
  return ret;
}
vector<pair<int, int> > simple_l(int sx, int sy, int fx, int fy, int len) {
  vector<pair<int, int> > ret;
  if ((sx - fx + 1) % 2 == 0) {
    int curx = sx, cury = sy;
    for (int i = 1; i <= sx - fx + 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          cury++;
        else
          cury--;
      }
      ret.push_back(make_pair(curx, cury));
      curx--;
    }
  } else {
    int curx = sx, cury = sy;
    for (int i = 1; i <= sx - fx - 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          cury++;
        else
          cury--;
      }
      ret.push_back(make_pair(curx, cury));
      curx--;
    }
    for (int i = 1; i <= len - 1; i++) {
      ret.push_back(make_pair(curx, cury));
      if (i % 2 == 0)
        curx++;
      else
        curx--;
      ret.push_back(make_pair(curx, cury));
      cury++;
    }
    if (curx == fx && cury == fy)
      ret.push_back(make_pair(curx, cury));
    else
      ret.push_back(make_pair(curx, cury)), ret.push_back(make_pair(fx, fy));
  }
  return ret;
}
vector<pair<int, int> > simple_r(int sx, int sy, int fx, int fy, int len) {
  vector<pair<int, int> > ret;
  if ((sx - fx + 1) % 2 == 0) {
    int curx = sx, cury = sy;
    for (int i = 1; i <= sx - fx + 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          cury--;
        else
          cury++;
      }
      ret.push_back(make_pair(curx, cury));
      curx--;
    }
  } else {
    int curx = sx, cury = sy;
    for (int i = 1; i <= sx - fx - 1; i++) {
      for (int j = 1; j < len; j++) {
        ret.push_back(make_pair(curx, cury));
        if (i % 2 == 0)
          cury--;
        else
          cury++;
      }
      ret.push_back(make_pair(curx, cury));
      curx--;
    }
    for (int i = 1; i <= len - 1; i++) {
      ret.push_back(make_pair(curx, cury));
      if (i % 2 == 0)
        curx++;
      else
        curx--;
      ret.push_back(make_pair(curx, cury));
      cury--;
    }
    if (curx == fx && cury == fy)
      ret.push_back(make_pair(curx, cury));
    else
      ret.push_back(make_pair(curx, cury)), ret.push_back(make_pair(fx, fy));
  }
  return ret;
}
vector<pair<int, int> > solve2(int sx, int sy, int fx, int fy) {
  vector<pair<int, int> > ret = simple_r(sy, sx, 1, sx, n - sx + 1);
  for (int i = 0; i < ret.size(); i++) swap(ret[i].first, ret[i].second);
  int curx = ret.back().first, cury = ret.back().second;
  curx--;
  vector<pair<int, int> > tek = solve_r_l(fx, fy, curx, cury);
  reverse(tek.begin(), tek.end());
  for (int i = 0; i < tek.size(); i++) ret.push_back(tek[i]);
  return ret;
}
vector<pair<int, int> > solve(int sx, int sy, int fx, int fy) {
  vector<pair<int, int> > ret = solve2(sx, sy, 1, sy);
  int curx = 1, cury = sy + 1;
  for (int i = 1; i < fx; i++) {
    if (i % 2 == 1) {
      for (int j = sy + 1; j < m; j++)
        ret.push_back(make_pair(curx, cury)), cury++;
      ret.push_back(make_pair(curx, cury));
      curx++;
    } else {
      for (int j = sy + 1; j < m; j++)
        ret.push_back(make_pair(curx, cury)), cury--;
      ret.push_back(make_pair(curx, cury));
      curx++;
    }
  }
  int tp = -1;
  if (cury == sy + 1) {
    vector<pair<int, int> > tk = solve_l_r(curx, cury, n, fy - 1);
    for (int i = 0; i < tk.size(); i++) ret.push_back(tk[i]);
    tp = 1;
  } else {
    vector<pair<int, int> > tk = solve_r_l(curx, cury, n, fy + 1);
    for (int i = 0; i < tk.size(); i++) ret.push_back(tk[i]);
    tp = 0;
  }
  curx = n, cury = fy;
  if (tp) {
    vector<pair<int, int> > tk = simple_r(curx, cury, fx, fy, m - fy + 1);
    for (int i = 0; i < tk.size(); i++) ret.push_back(tk[i]);
  } else {
    vector<pair<int, int> > tk = simple_l(curx, cury, fx, fy, fy - sy);
    for (int i = 0; i < tk.size(); i++) ret.push_back(tk[i]);
  }
  return ret;
}
int fnd_ans(int n, int m, int sx, int st, int fx, int fy) {
  int col1 = ((sx + st + 1) % 2);
  int col2 = ((fx + fy + 1) % 2);
  int cntb = (n * m + 1) / 2;
  int cntw = (n * m) / 2;
  if (col1 == 1 && col2 == 1) return cntb * 2 - 1;
  if (col1 == 1 && col2 == 0) return cntw * 2;
  if (col1 == 0 && col2 == 1) return cntw * 2;
  if (col1 == 0 && col2 == 0) return 2 * cntw - 1;
}
int is_in(int x, int y) { return (1 <= x && x <= n && y >= 1 && y <= m); }
int check(vector<pair<int, int> > res, int sx, int sy, int fx, int fy) {
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= m; j++) used[i][j] = 0;
  if (!(sx == res[0].first && sy == res[0].second)) return 0;
  if (!(fx == res.back().first && fy == res.back().second)) return 0;
  for (int i = 0; i < res.size(); i++)
    if (!is_in(res[i].first, res[i].second)) return 0;
  for (int i = 1; i < res.size(); i++) {
    int sum = abs(res[i].first - res[i - 1].first) +
              abs(res[i].second - res[i - 1].second);
    if (sum != 1) return 0;
  }
  return 1;
}
vector<pair<int, int> > find_res(int x1, int y1, int x2, int y2, int ok) {
  vector<pair<int, int> > res;
  res = solve(x1, y1, x2, y2);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  reverse(res.begin(), res.end());
  swap(x1, x2), swap(y1, y2);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++) swap(res[i].first, res[i].second);
  swap(x1, y1), swap(x2, y2), swap(n, m);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m), swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++) swap(res[i].first, res[i].second);
  reverse(res.begin(), res.end());
  swap(x1, y1), swap(x2, y2), swap(n, m), swap(x1, x2), swap(y1, y2);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++) res[i].first = n + 1 - res[i].first;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++) res[i].first = n + 1 - res[i].first;
  swap(x1, x2), swap(y1, y2);
  reverse(res.begin(), res.end());
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++) res[i].second = m + 1 - res[i].second;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++) res[i].second = m + 1 - res[i].second;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  reverse(res.begin(), res.end());
  swap(x1, x2), swap(y1, y2);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].second = m + 1 - res[i].second, res[i].first = n + 1 - res[i].first;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].second = m + 1 - res[i].second, res[i].first = n + 1 - res[i].first;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, x2), swap(y1, y2);
  reverse(res.begin(), res.end());
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].first = n + 1 - res[i].first, swap(res[i].first, res[i].second);
  ;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].first = n + 1 - res[i].first, swap(res[i].first, res[i].second);
  ;
  swap(x1, x2), swap(y1, y2);
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  reverse(res.begin(), res.end());
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].second = m + 1 - res[i].second, swap(res[i].first, res[i].second);
  ;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].second = m + 1 - res[i].second, swap(res[i].first, res[i].second);
  ;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  swap(x1, x2), swap(y1, y2);
  swap(x1, y1), swap(x2, y2), swap(n, m);
  reverse(res.begin(), res.end());
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].second = m + 1 - res[i].second, res[i].first = n + 1 - res[i].first,
    swap(res[i].first, res[i].second);
  ;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  swap(x1, y1), swap(x2, y2), swap(n, m);
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, x2), swap(y1, y2);
  res = solve(x1, y1, x2, y2);
  for (int i = 0; i < res.size(); i++)
    res[i].second = m + 1 - res[i].second, res[i].first = n + 1 - res[i].first,
    swap(res[i].first, res[i].second);
  ;
  y1 = m + 1 - y1, y2 = m + 1 - y2;
  x1 = n + 1 - x1, x2 = n + 1 - x2;
  swap(x1, x2), swap(y1, y2);
  swap(x1, y1), swap(x2, y2), swap(n, m);
  reverse(res.begin(), res.end());
  if (res.size() == ok && check(res, x1, y1, x2, y2)) return res;
  res.clear();
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  int x1, y1, x2, y2;
  scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
  vector<pair<int, int> > res =
      find_res(x1, y1, x2, y2, fnd_ans(n, m, x1, y1, x2, y2));
  printf("%d\n", res.size());
  for (int i = 0; i < res.size(); i++) {
    printf("%d %d\n", res[i].first, res[i].second);
  }
  return 0;
}
