#include <bits/stdc++.h>
using namespace std;
vector<long long> p[9], q[9];
long long d[9][9];
set<long long> s;
void setup() {
  long long x;
  for (int i = 1; i <= 8; i++) {
    for (int j = 1; j <= 3; j++) {
      cin >> x;
      p[i].push_back(x);
      q[i].push_back(0);
    }
    sort(p[i].begin(), p[i].end());
  }
}
long long dis(int i, int j) {
  long long re = 0;
  for (int k = 0; k <= 2; k++) re += (q[i][k] - q[j][k]) * (q[i][k] - q[j][k]);
  return re;
}
bool ok() {
  s.clear();
  for (int i = 1; i <= 7; i++)
    for (int j = i + 1; j <= 8; j++) {
      long long k = dis(i, j);
      if (k == 0) return false;
      s.insert(k);
      if (s.size() > 3) return false;
    }
  return true;
}
void deal(int u) {
  if (u == 9) {
    if (ok()) {
      cout << "YES\n";
      for (int i = 1; i <= 8; i++) {
        for (int j = 0; j <= 2; j++) cout << q[i][j] << ' ';
        cout << '\n';
      }
      exit(0);
    }
    return;
  }
  for (int i = 0; i <= 2; i++) q[u][i] = p[u][i];
  do {
    deal(u + 1);
  } while (next_permutation(q[u].begin(), q[u].end()));
}
void xuly() {
  for (int i = 0; i <= 2; i++) q[1][i] = p[1][i];
  deal(2);
  cout << "NO";
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  setup();
  xuly();
  return 0;
}
