#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x, y;
  Point(int x, int y) {
    this->x = x;
    this->y = y;
  }
  Point() {
    this->x = 0;
    this->y = 0;
  }
  bool operator<(const Point p) const {
    if (this->x != p.x) return this->x < p.x;
    return this->y < p.y;
  }
  bool operator==(const Point p) const { return !(*this < p) && !(p < *this); }
};
bool inBetweenY(Point x, Point a, Point b) {
  return (a.y <= x.y && x.y <= b.y) || (b.y <= x.y && x.y <= a.y);
}
vector<Point> getPaths(vector<Point> &inp) {
  sort(inp.begin(), inp.end());
  vector<Point> result;
  for (int i = inp[0].x; i <= inp[1].x; i++)
    result.push_back(Point(i, inp[0].y));
  for (int i = inp[1].x; i <= inp[2].x; i++)
    result.push_back(Point(i, inp[2].y));
  int yStart = min(min(inp[0].y, inp[1].y), min(inp[0].y, inp[2].y));
  int yEnd = max(max(inp[0].y, inp[1].y), max(inp[0].y, inp[2].y));
  for (int i = yStart; i <= yEnd; i++) result.push_back(Point(inp[1].x, i));
  sort(result.begin(), result.end());
  vector<Point>::iterator it = unique(result.begin(), result.end());
  result.resize(distance(result.begin(), it));
  return result;
}
int main() {
  vector<Point> inp;
  for (int i = 0; i < 3; i++) {
    int x, y;
    cin >> x >> y;
    inp.push_back(Point(x, y));
  }
  vector<Point> paths = getPaths(inp);
  cout << paths.size() << endl;
  for (int i = 0; i < int(paths.size()); i++)
    cout << paths[i].x << " " << paths[i].y << endl;
}
