#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
  point(const point &a) {
    x = a.x;
    y = a.y;
  }
  point(int xx = 0, int yy = 0) {
    x = xx;
    y = yy;
  }
};
int encode(const point &a) { return (a.x << 10) | a.y; }
void decode(const int h, point &a) {
  a.x = h >> 10;
  a.y = h ^ (a.x << 10);
}
map<int, bool> m;
void print(const point &a, const point &b) {
  for (int s = a.x < b.x ? 1 : -1, i = a.x; i != b.x; i += s) {
    int h = encode(point(i, a.y));
    m[h] = true;
  }
  for (int s = a.y < b.y ? 1 : -1, i = a.y; i != b.y; i += s) {
    int h = encode(point(b.x, i));
    m[h] = true;
  }
}
int main() {
  point a, b, c;
  scanf("%d%d%d%d%d%d", &a.x, &a.y, &b.x, &b.y, &c.x, &c.y);
  if (a.x > b.x || (a.x == b.x && a.y < b.y)) swap(a, b);
  if (b.x > c.x || (b.x == c.x && b.y < c.y)) swap(b, c);
  if (a.x > b.x || (a.x == b.x && a.y < b.y)) swap(a, b);
  m[encode(a)] = true;
  m[encode(b)] = true;
  m[encode(c)] = true;
  if (b.y == a.y) {
    print(a, b);
    print(b, c);
  } else if (b.y > a.y) {
    if (c.y >= b.y) {
      print(a, b);
      print(b, c);
    } else if (c.y >= a.y) {
      point d(b.x, c.y);
      print(a, d);
      print(d, b);
      print(d, c);
    } else {
      point d(b.x, a.y);
      print(a, b);
      print(d, c);
    }
  } else {
    if (c.y <= b.y) {
      print(a, b);
      print(b, c);
    } else if (c.y <= a.y) {
      point d(b.x, c.y);
      print(a, d);
      print(d, b);
      print(d, c);
    } else {
      point d(b.x, a.y);
      print(a, b);
      print(d, c);
    }
  }
  printf("%ld\n", m.size());
  point p;
  for (const auto &i : m) {
    decode(i.first, p);
    printf("%d %d\n", p.x, p.y);
  }
  return 0;
}
