#include <bits/stdc++.h>
int A[8][3];
long long get_dis(int x, int y) {
  long long res = 0;
  for (int i = 0; i < 3; i++) {
    res += 1ll * (A[x][i] - A[y][i]) * (A[x][i] - A[y][i]);
  }
  return res;
}
bool check() {
  std::map<long long, int> map;
  for (int i = 0; i < 8; ++i) {
    for (int j = i + 1; j < 8; ++j) {
      map[get_dis(i, j)]++;
    }
  }
  if (map.size() != 3) {
    return false;
  }
  long long v[3];
  int cnt = 0, d[3] = {12, 12, 4};
  for (std::map<long long, int>::iterator it = map.begin(); it != map.end();
       ++it) {
    v[cnt++] = it->first;
    if (it->second != d[cnt - 1]) return false;
  }
  if (v[0] == 0 || v[0] * 2 != v[1] || v[0] * 3 != v[2]) {
    return false;
  }
  return true;
}
bool dfs(int p) {
  if (p == 8) {
    return check();
  }
  std::sort(A[p], A[p] + 3);
  do {
    if (dfs(p + 1)) return true;
  } while (std::next_permutation(A[p], A[p] + 3));
  return false;
}
int main() {
  for (int i = 0; i < 8; ++i) {
    for (int j = 0; j < 3; ++j) {
      scanf("%d", &A[i][j]);
    }
  }
  if (!dfs(1)) {
    puts("NO");
  } else {
    puts("YES");
    for (int i = 0; i < 8; ++i) {
      for (int j = 0; j < 3; ++j) {
        printf("%d%c", A[i][j], " \n"[j == 2]);
      }
    }
  }
  return 0;
}
