#include <bits/stdc++.h>
const double eps = 1E-8;
const double pi = acos(-1);
using namespace std;
long long a[10][5];
long long d[30], d2[30];
int m;
set<long long> x;
map<long long, int> y;
void xuat() {
  int i, j;
  printf("YES\n");
  for (i = 1; i <= 8; ++i) {
    for (j = 1; j <= 3; ++j) printf("%I64d ", a[i][j]);
    printf("\n");
  }
  exit(0);
}
inline bool check() {
  if (x.size() != 3) return 0;
  multiset<long long>::iterator it = x.begin();
  long long d1 = *it;
  if (y[d1] != 12) return 0;
  it++;
  long long d2 = *it;
  if (d2 != d1 << 1ll || y[d2] != 12) return 0;
  it++;
  long long d3 = *it;
  if (d3 != d1 * 3ll) return 0;
  return 1;
}
void thu(int i) {
  int j;
  long long tg;
  do {
    for (j = 1; j < i; ++j) {
      tg = (a[i][1] - a[j][1]) * (a[i][1] - a[j][1]) +
           (a[i][2] - a[j][2]) * (a[i][2] - a[j][2]) +
           (a[i][3] - a[j][3]) * (a[i][3] - a[j][3]);
      x.insert(tg);
      y[tg]++;
    }
    if (x.size() <= 3) {
      if (i == 8) {
        if (check()) xuat();
      } else
        thu(i + 1);
    }
    for (j = 1; j < i; ++j) {
      tg = (a[i][1] - a[j][1]) * (a[i][1] - a[j][1]) +
           (a[i][2] - a[j][2]) * (a[i][2] - a[j][2]) +
           (a[i][3] - a[j][3]) * (a[i][3] - a[j][3]);
      x.erase(tg);
      y[tg]--;
    }
  } while (next_permutation(a[i] + 1, a[i] + 4));
}
int main() {
  int i, j;
  for (i = 1; i <= 8; ++i) {
    for (j = 1; j <= 3; ++j) {
      scanf("%I64d", &a[i][j]);
    }
    sort(a[i] + 1, a[i] + 4);
  }
  thu(1);
  printf("NO");
}
