#include <bits/stdc++.h>
using namespace std;
int a[8][3], flag = 0;
inline long double dist(long double x1, long double y1, long double z1,
                        long double x2, long double y2, long double z2) {
  return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) +
              (z2 - z1) * (z2 - z1));
}
inline void isCube(int index, int f[8][3],
                   map<pair<int, pair<int, int> >, int> m) {
  if (flag == 1) return;
  if (index == 8) {
    long double x1 = 0.0, y1 = 0.0, z1 = 0.0, dist1, temp_dist;
    for (int i = 0; i < 8; i++) {
      x1 += f[i][0] * 1.0;
      y1 += f[i][1] * 1.0;
      z1 += f[i][2] * 1.0;
    }
    x1 /= 8.0, y1 /= 8.0, z1 /= 8.0;
    dist1 = dist(x1, y1, z1, f[0][0], f[0][1], f[0][2]);
    for (int i = 1; i < 8; i++) {
      temp_dist = dist(x1, y1, z1, f[i][0], f[i][1], f[i][2]);
      if (temp_dist != dist1) return;
    }
    flag = 1;
    cout << "YES" << endl;
    for (int i = 0; i < 8; i++) {
      cout << f[i][0] << " " << f[i][1] << " " << f[i][2] << endl;
    }
    return;
  }
  do {
    if (m.find(make_pair(a[index][0], make_pair(a[index][1], a[index][2]))) !=
        m.end())
      continue;
    f[index][0] = a[index][0];
    f[index][1] = a[index][1];
    f[index][2] = a[index][2];
    m[make_pair(a[index][0], make_pair(a[index][1], a[index][2]))] = 1;
    isCube(index + 1, f, m);
    m.erase(make_pair(a[index][0], make_pair(a[index][1], a[index][2])));
  } while (next_permutation(a[index], a[index] + 3));
  return;
}
inline void Solve() {
  int i, j;
  for (i = 0; i < 8; i++) {
    cin >> a[i][0] >> a[i][1] >> a[i][2];
    sort(a[i], a[i] + 3);
  }
  int f[8][3];
  f[0][0] = a[0][0];
  f[0][1] = a[0][1];
  f[0][2] = a[0][2];
  int index = 0;
  map<pair<int, pair<int, int> >, int> m;
  m[make_pair(a[index][0], make_pair(a[index][1], a[index][2]))] = 1;
  isCube(1, f, m);
  if (flag == 0) cout << "NO" << endl;
  return;
}
int main() {
  long long t = 1;
  while (t--) {
    Solve();
  }
  return 0;
}
