#include <bits/stdc++.h>
using namespace std;
long long sqr(long long x) { return x * x; }
bool done = false;
int p[8][3];
bool same(double x, double y) { return abs(x - y) < 1e-9; }
int cnt = 0;
void backtr(int idx) {
  if (done) return;
  if (idx == 7) {
    cnt++;
    map<long long, int> ck;
    vector<long long> t(28), v(3, 1);
    int idx = 0, idx2 = 0;
    long long l1 = -1, l2 = -1, l3 = -1;
    for (int i = 0; i < 8; ++i)
      for (int j = i + 1; j < 8; ++j) {
        t[idx++] = sqr(p[i][0] - p[j][0]) + sqr(p[i][1] - p[j][1]) +
                   sqr(p[i][2] - p[j][2]);
        if (!ck.count(t[idx - 1])) {
          if (idx2 == 3) return;
          v[idx2++] = t[idx - 1], ck[t[idx - 1]] = 1;
        } else
          ck[t[idx - 1]]++;
      }
    sort(v.begin(), v.end());
    if (ck[v[0]] == 12 && ck[v[1]] == 12 && ck[v[2]] == 4 && 2 * v[0] == v[1] &&
        v[0] + v[1] == v[2]) {
      done = true;
      printf("YES\n");
      for (int i = 0; i < 8; ++i)
        printf("%d %d %d\n", p[i][0], p[i][1], p[i][2]);
    }
  } else {
    do {
      backtr(idx + 1);
      if (done) return;
    } while (next_permutation(p[idx], p[idx] + 3));
    sort(p[idx], p[idx] + 3);
  }
}
int main() {
  clock_t start_time, end_time;
  start_time = clock();
  for (int i = 0; i < 8; ++i)
    scanf("%d%d%d", &p[i][0], &p[i][1], &p[i][2]), sort(p[i], p[i] + 3);
  backtr(0);
  if (!done) printf("NO");
  end_time = clock();
}
