#include <bits/stdc++.h>
using namespace std;
struct _ {
  ios_base::Init i;
  _() {
    cin.sync_with_stdio(0);
    cin.tie(0);
  }
} _;
int n, m;
const int N = 100 * 1000 + 1;
int l[N], r[N], q[N], sum[N];
int MAXBIT = 30;
vector<vector<int> > x(8, vector<int>(3));
vector<long long> d(7 * 4);
bool check() {
  int indx = 0;
  for (int i = 0; i < 7; ++i) {
    for (int k = i + 1; k < 8; ++k) {
      d[indx++] =
          ((1LL * x[i][0] - 1LL * x[k][0]) * (1LL * x[i][0] - 1LL * x[k][0]) +
           (1LL * x[i][1] - 1LL * x[k][1]) * (1LL * x[i][1] - 1LL * x[k][1]) +
           (1LL * x[i][2] - 1LL * x[k][2]) * (1LL * x[i][2] - 1LL * x[k][2]));
    }
  }
  sort((d).begin(), (d).end());
  long long asq = d[0];
  if (asq == 0) return false;
  for (int i = 1; i < 12; ++i)
    if (d[i] != asq) return false;
  for (int i = 12; i < 24; ++i)
    if (d[i] != 2 * asq) return false;
  for (int i = 24; i < 28; ++i)
    if (d[i] != 3 * asq) return false;
  return true;
}
bool dfs(int i) {
  int k = 0;
  do {
    if (i == 7) {
      if (check()) return true;
    } else {
      if (dfs(i + 1)) return true;
    }
    k++;
    next_permutation((x[i]).begin(), (x[i]).end());
  } while (k < 6);
  return false;
}
int main() {
  for (int i = 0; i < 8; ++i) {
    cin >> x[i][0] >> x[i][1] >> x[i][2];
  }
  if (!dfs(1)) {
    cout << "NO" << endl;
    return 0;
  }
  cout << "YES" << endl;
  for (int i = 0; i < 8; ++i) {
    for (int j = 0; j < 3; ++j) cout << x[i][j] << " ";
    cout << endl;
  }
  return 0;
}
