#include <bits/stdc++.h>
using namespace std;
const int maxN = 1001;
long long in[8][3];
int perm[6][2] = {{0, 0}, {0, 1}, {1, 2}, {0, 2}, {0, 1}, {1, 2}};
bool found;
int ctr[3];
long long D[8];
inline int get_int() {
  int a;
  scanf("%d", &a);
  return a;
}
void get_arr(long long* a, int n) {
  for (int i = 0; i < n; i++) scanf("%lld", a + i);
}
void print_arr(long long* a, int n) {
  for (int i = 0; i < n; i++) printf("%lld ", a[i]);
  printf("\n");
}
long long kw(long long a) { return a * a; }
long long dist(int i, int j) {
  long long res = 0;
  for (int k = 0; k < 3; k++) res += kw(in[i][k] - in[j][k]);
  return res;
}
bool first_seen = false;
void go(int depth) {
  if (first_seen) return;
  if (depth == 8) {
    for (int i = 1; i < 8; i++) D[i] = dist(0, i);
    sort(D + 1, D + 8);
    long long a = D[1], b = D[6], c = D[7];
    if (b != a * 2 or c != a * 3 or a == 0) return;
    for (int i = 0; i < 8; i++) {
      ctr[0] = ctr[1] = ctr[2] = 0;
      for (int j = 0; j < 8; j++) {
        if (j == i) continue;
        long long d = dist(i, j);
        if (d == a) ctr[0]++;
        if (d == b) ctr[1]++;
        if (d == c) ctr[2]++;
      }
      if (ctr[0] != 3 or ctr[1] != 3 or ctr[2] != 1) return;
    }
    found = true;
    return;
  }
  for (int i = 0; i < 6; i++) {
    int j = perm[i][0], k = perm[i][1];
    swap(in[depth][j], in[depth][k]);
    go(depth + 1);
    if (found) return;
  }
}
int main() {
  for (int i = 0; i < 8; i++) get_arr(in[i], 3);
  go(0);
  if (!found)
    printf("NO\n");
  else {
    printf("YES\n");
    for (int i = 0; i < 8; i++) print_arr(in[i], 3);
  }
  return 0;
}
