#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int ans = N, a, b, c, d, num;
int dis[N], vs[1002][1002];
struct P {
  int x, y;
  P(int x_ = 0, int y_ = 0) : x(x_), y(y_){};
} p[3], pos, st, as[N];
inline void to(P a, P b) {
  int nw = abs(a.x - b.x) + abs(a.y - b.y) - 1;
  if (nw < ans) {
    ans = nw;
    pos = b;
  }
}
inline void arv(P nw, P nt) {
  if (nw.x == nt.x && nw.y == nt.y) return;
  if (!vs[nw.x][nw.y]) vs[nw.x][nw.y] = 1, as[++num] = nw;
  if (nw.x < nt.x)
    arv(P(nw.x + 1, nw.y), nt);
  else if (nw.x > nt.x)
    arv(P(nw.x - 1, nw.y), nt);
  else if (nw.y < nt.y)
    arv(P(nw.x, nw.y + 1), nt);
  else if (nw.y > nt.y)
    arv(P(nw.x, nw.y - 1), nt);
}
int main() {
  int i, j, k;
  for (i = 0; i < 3; ++i) scanf("%d%d", &p[i].x, &p[i].y);
  for (i = 0; i < 3; ++i) {
    for (j = i + 1; j < 3; ++j) {
      for (k = 0; k < 3 && (k == i || k == j); ++k)
        ;
      if (p[k].x < min(p[i].x, p[j].x) || p[k].x > max(p[i].x, p[j].x) ||
          p[k].y < min(p[i].y, p[j].y) || p[k].y > max(p[i].y, p[j].y))
        break;
    }
    if (j < 3) break;
  }
  swap(p[k], p[2]);
  a = min(p[0].x, p[1].x);
  b = max(p[0].x, p[1].x);
  c = min(p[0].y, p[1].y);
  d = max(p[0].y, p[1].y);
  for (i = a; i <= b; ++i) to(p[2], P(i, c)), to(p[2], P(i, d));
  for (i = c; i <= d; ++i) to(p[2], P(a, i)), to(p[2], P(b, i));
  st = pos;
  for (i = 0; i < 3; ++i) as[++num] = p[i], vs[p[i].x][p[i].y] = 1;
  for (i = 0; i < 3; ++i) arv(st, p[i]);
  printf("%d\n", num);
  for (i = 1; i <= num; ++i) printf("%d %d\n", as[i].x, as[i].y);
}
