#include <bits/stdc++.h>
using namespace std;
const int root = 1;
const int INF = 1000000000;
const int mod = 1000000007;
int n, m;
vector<int> by;
long long pt[20][5], ans[20][5];
pair<pair<int, int>, int> tmp[10];
set<long long> S;
int a[10];
vector<int> per[10];
map<long long, int> mp;
pair<long long, int> p[5];
int b[5] = {1, 2, 3};
int c[5] = {12, 12, 4};
long long dist(long long A[], long long B[]) {
  return ((A[1] - B[1]) * (A[1] - B[1])) + ((A[2] - B[2]) * (A[2] - B[2])) +
         ((A[3] - B[3]) * (A[3] - B[3]));
}
int check() {
  if (mp.size() != 3) return 0;
  int sum = 0;
  for (map<long long, int>::iterator it = mp.begin(); it != mp.end(); it++) {
    p[sum++] = *it;
  }
  for (int i = 0; i < sum; i++)
    if (p[i].second != c[i] || p[i].first != p[0].first * b[i]) return 0;
  return 1;
}
int dfs(int k) {
  if (k > 8) return check();
  int found = 0;
  for (int i = 0; !found && i < 6; i++) {
    ans[k][1] = pt[k][per[i][0]];
    ans[k][2] = pt[k][per[i][1]];
    ans[k][3] = pt[k][per[i][2]];
    map<long long, int>::iterator it;
    for (int j = 1; j < k; j++) mp[dist(ans[k], ans[j])]++;
    if (mp.size() < 4) found = dfs(k + 1);
    for (int j = 1; j < k; j++) {
      it = mp.find(dist(ans[k], ans[j]));
      if (it->second == 1)
        mp.erase(it);
      else
        it->second--;
    }
  }
  return found;
}
int main() {
  for (int i = 0; i < 3; i++) a[i] = i + 1;
  int sum = 0;
  do {
    for (int i = 0; i < 3; i++) per[sum].push_back(a[i]);
    sum++;
  } while (next_permutation(a, a + 3));
  while (1) {
    for (int i = 1; i <= 8; i++)
      for (int j = 1; j <= 3; j++) cin >> pt[i][j];
    for (int i = 1; i <= 3; i++) ans[1][i] = pt[1][i];
    if (dfs(2)) {
      printf("YES\n");
      for (int i = 1; i <= 8; i++)
        cout << ans[i][1] << " " << ans[i][2] << " " << ans[i][3] << endl;
    } else
      printf("NO\n");
    break;
  }
  return 0;
}
