#include <bits/stdc++.h>
using namespace std;
struct point {
  int y, x;
  bool eq(point p) { return y == p.y and x == p.x; }
  int dist(point p) { return abs(p.y - y) + abs(p.x - x); }
};
int n;
point A, B, C;
vector<point> path;
void add(point a, point b) {
  if (a.x > b.x) swap(a, b);
  if (a.y == b.y) {
    for (int i = a.x + 1; i < b.x; i++) {
      point p = {a.y, i};
      path.push_back(p);
    }
    return;
  }
  if (a.x == b.x) {
    if (a.y > b.y) swap(a, b);
    for (int i = a.y + 1; i < b.y; i++) {
      point p = {i, a.x};
      path.push_back(p);
    }
    return;
  }
  for (int i = a.x + 1; i <= b.x; i++) {
    point p = {a.y, i};
    path.push_back(p);
  }
  int t = 1;
  if (a.y > b.y) t = -1;
  for (int i = a.y + t; i != b.y; i += t) {
    point p = {i, b.x};
    path.push_back(p);
  }
}
void pri() {
  cout << path.size() + 3 << endl;
  for (auto p : path) {
    cout << p.x << " " << p.y << endl;
  }
  cout << A.x << " " << A.y << endl;
  cout << B.x << " " << B.y << endl;
  cout << C.x << " " << C.y << endl;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> A.x >> A.y >> B.x >> B.y >> C.x >> C.y;
  int bDist = 100100;
  point best;
  for (int i = 0; i <= 1000; i++) {
    for (int j = 0; j <= 1000; j++) {
      point p = {i, j};
      int d = p.dist(A) + p.dist(B) + p.dist(C);
      if (d < bDist) {
        bDist = d;
        best = p;
      }
    }
  }
  add(A, best);
  add(B, best);
  add(C, best);
  if (!best.eq(A) and !best.eq(B) and !best.eq(C)) path.push_back(best);
  pri();
}
