#include <bits/stdc++.h>
using namespace std;
struct cord {
  int x, y;
};
bool sortings(cord c1, cord c2) {
  if (c1.x == c2.x) return c1.y < c2.y;
  return c1.x < c2.x;
}
int main() {
  cord x[3];
  for (int a = 0; a < 3; a++) {
    cin >> x[a].x >> x[a].y;
  }
  sort(x, x + 3, sortings);
  cord count[5000];
  int val = 0;
  for (int a = x[0].x; a <= x[1].x; a++) {
    count[val].x = a;
    count[val].y = x[0].y;
    val++;
  }
  if (x[1].y >= x[0].y)
    for (int a = x[0].y + 1; a <= x[1].y; a++) {
      count[val].x = x[1].x;
      count[val].y = a;
      val++;
    }
  else {
    for (int a = x[0].y - 1; a >= x[1].y; a--) {
      count[val].x = x[1].x;
      count[val].y = a;
      val++;
    }
  }
  if (x[2].y >= max(x[0].y, x[1].y)) {
    for (int a = x[1].x + 1; a <= x[2].x; a++) {
      count[val].x = a;
      count[val].y = max(x[0].y, x[1].y);
      val++;
    }
    for (int a = max(x[1].y, x[0].y) + 1; a <= x[2].y; a++) {
      count[val].x = x[2].x;
      count[val].y = a;
      val++;
    }
  } else {
    if (x[2].y < min(x[0].y, x[1].y)) {
      for (int a = x[1].x + 1; a <= x[2].x; a++) {
        count[val].x = a;
        count[val].y = min(x[0].y, x[1].y);
        val++;
      }
      for (int a = min(x[0].y, x[1].y) - 1; a >= x[2].y; a--) {
        count[val].x = x[2].x;
        count[val].y = a;
        val++;
      }
    } else {
      int d1 = min(x[0].y, x[1].y);
      if (x[2].x - x[1].x + x[2].y - d1 >= x[2].x - x[1].x &&
          x[2].x - x[1].x + max(x[1].y, x[0].y) - x[2].y >= x[2].x - x[1].x) {
        for (int a = x[1].x + 1; a <= x[2].x; a++) {
          count[val].x = a;
          count[val].y = x[2].y;
          val++;
        }
      } else {
        if (x[2].x - x[1].x + x[2].y - d1 >=
            x[2].x - x[1].x + max(x[1].y, x[0].y) - x[2].y) {
          for (int a = x[1].x + 1; a <= x[2].x; a++) {
            count[val].x = a;
            count[val].y = max(x[0].y, x[1].y);
            val++;
          }
          for (int a = max(x[0].y, x[1].y) - 1; a >= x[2].y; a--) {
            count[val].x = x[2].x;
            count[val].y = a;
            val++;
          }
        } else {
          for (int a = x[1].x + 1; a <= x[2].x; a++) {
            count[val].x = a;
            count[val].y = min(x[0].y, x[1].y);
            val++;
          }
          for (int a = min(x[0].y, x[1].y) - 1; a <= x[2].y; a++) {
            count[val].x = x[2].x;
            count[val].y = a;
            val++;
          }
        }
      }
    }
  }
  int val1 = 1;
  sort(count, count + val, sortings);
  for (int a = 0; a < val - 1; a++) {
    if (count[a].x != count[a + 1].x || count[a].y != count[a + 1].y) {
      val1++;
    }
  }
  cout << val1 << endl;
  for (int a = 0; a < val - 1; a++) {
    if (count[a].x != count[a + 1].x || count[a].y != count[a + 1].y) {
      cout << count[a].x << " " << count[a].y << endl;
    }
  }
  cout << count[val - 1].x << " " << count[val - 1].y << endl;
  return 0;
}
