#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x, y;
  Point(int _x = 0, int _y = 0) : x(_x), y(_y) {}
};
const int MAXN = 5;
Point a[MAXN];
int sym(int x) {
  if (x > 0)
    return 1;
  else if (x == 0)
    return 0;
  else
    return -1;
}
int dist(Point &p0, Point &p1) { return abs(p0.x - p1.x) + abs(p0.y - p1.y); }
void printp(Point &p0, Point &p1) {
  int i, j, dt;
  for (dt = sym(p1.x - p0.x), i = p0.x, j = p0.y; i != p1.x; i += dt)
    printf("%d %d\n", i, j);
  for (dt = sym(p1.y - p0.y); j != p1.y; j += dt) printf("%d %d\n", i, j);
  return;
}
int solve(Point &p0, Point &p1, Point &p2, bool toprint) {
  int x0 = min(p0.x, p1.x);
  int x1 = max(p0.x, p1.x);
  int y0 = min(p0.y, p1.y);
  int y1 = max(p0.y, p1.y);
  int ret = INT_MAX, ansk;
  Point p[4];
  if ((x0 < p2.x && p2.x < x1) || (y0 < p2.y && p2.y < y1)) return ret;
  p[0] = Point(x0, y0);
  p[1] = Point(x0, y1);
  p[2] = Point(x1, y0);
  p[3] = Point(x1, y1);
  for (int i = 0, j; i < 4; ++i)
    if ((j = min(ret, dist(p0, p1) + 1 + dist(p2, p[i]))) < ret)
      ret = j, ansk = i;
  if (!toprint) return ret;
  printf("%d\n", ret);
  for (int i = 0; i < 3; ++i) printp(a[i], p[ansk]);
  printf("%d %d\n", p[ansk].x, p[ansk].y);
  return 0;
}
int main() {
  int n, ansk, ansv = INT_MAX;
  for (int i = 0; i < 3; ++i) scanf("%d%d", &a[i].x, &a[i].y);
  for (int i = 0, j; i < 3; ++i)
    if ((j = solve(a[i], a[(i + 1) % 3], a[(i + 2) % 3], false)) < ansv)
      ansv = j, ansk = i;
  solve(a[ansk], a[(ansk + 1) % 3], a[(ansk + 2) % 3], true);
  return 0;
}
