#include <bits/stdc++.h>
using namespace std;
vector<int> operator+(const vector<int>& a, const vector<int>& b) {
  return vector<int>{a[0] + b[0], a[1] + b[1], a[2] + b[2]};
}
vector<int> operator-(const vector<int>& a, const vector<int>& b) {
  return vector<int>{a[0] - b[0], a[1] - b[1], a[2] - b[2]};
}
int operator*(const vector<int>& a, const vector<int>& b) {
  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
}
vector<vector<int> > points;
bool internal_ok(vector<int>& ref, int k) {
  int c = ref[k];
  vector<vector<int> > v;
  for (int i = 0; i < 4; ++i) {
    if (i == k) continue;
    v.push_back(points[ref[i]] - points[c]);
  }
  for (int i = 0; i < 3; ++i) {
    for (int j = i + 1; j < 3; ++j) {
      if (v[i] * v[j] != 0) return false;
    }
  }
  set<vector<int> > expected;
  expected.insert(points[c] + v[0] + v[1]);
  expected.insert(points[c] + v[0] + v[2]);
  expected.insert(points[c] + v[1] + v[2]);
  expected.insert(points[c] + v[0] + v[1] + v[2]);
  for (int i = 0; i < 8; ++i) {
    bool in_ref = false;
    for (int j = 0; j < 4; ++j) {
      if (i == ref[j]) in_ref = true;
    }
    if (in_ref) continue;
    vector<int>& p = points[i];
    sort(p.begin(), p.end());
    bool found = false;
    do {
      if (expected.count(p)) {
        expected.erase(p);
        found = true;
        break;
      }
    } while (next_permutation(p.begin(), p.end()));
    if (not found) return false;
  }
  cout << "YES" << endl;
  for (int i = 0; i < 8; ++i) {
    for (int j = 0; j < 3; ++j) {
      if (j) cout << " ";
      cout << points[i][j];
    }
    cout << endl;
  }
  return true;
}
bool ok(vector<int>& ref, int i = 0) {
  if (i < 4) {
    sort(points[ref[i]].begin(), points[ref[i]].end());
    do {
      if (ok(ref, i + 1)) return true;
    } while (next_permutation(points[ref[i]].begin(), points[ref[i]].end()));
    return false;
  }
  for (int k = 0; k < 4; ++k) {
    if (internal_ok(ref, k)) return true;
  }
  return false;
}
bool solve() {
  for (int a = 0; a < 8; ++a) {
    for (int b = a + 1; b < 8; ++b) {
      for (int c = b + 1; c < 8; ++c) {
        for (int d = c + 1; d < 8; ++d) {
          vector<int> ref{a, b, c, d};
          if (ok(ref)) return true;
        }
      }
    }
  }
  return false;
}
int main() {
  points = vector<vector<int> >(8, vector<int>(3));
  for (int i = 0; i < 8; ++i) {
    for (int j = 0; j < 3; ++j) cin >> points[i][j];
    sort(points[i].begin(), points[i].end());
  }
  if (not solve()) cout << "NO" << endl;
}
