#include <bits/stdc++.h>
using namespace std;
long long maxll = (long long)1e18;
map<pair<int, pair<int, int> >, vector<pair<int, pair<int, int> > > > adj;
long long coor[8][3];
bool found;
bool check() {
  adj.clear();
  long long distsq = maxll, x, y, z;
  for (int i = 1; i < 8; ++i) {
    x = coor[i][0] - coor[0][0];
    y = coor[i][1] - coor[0][1];
    z = coor[i][2] - coor[0][2];
    x = x * x;
    y = y * y;
    z = z * z;
    distsq = min(x + y + z, distsq);
  }
  for (int i = 0; i < 8; ++i) {
    for (int j = i; j < 8; ++j) {
      x = coor[i][0] - coor[j][0];
      y = coor[i][1] - coor[j][1];
      z = coor[i][2] - coor[j][2];
      x = x * x;
      y = y * y;
      z = z * z;
      if (x + y + z == distsq) {
        adj[make_pair(coor[i][0], make_pair(coor[i][1], coor[i][2]))].push_back(
            make_pair(coor[j][0], make_pair(coor[j][1], coor[j][2])));
        adj[make_pair(coor[j][0], make_pair(coor[j][1], coor[j][2]))].push_back(
            make_pair(coor[i][0], make_pair(coor[i][1], coor[i][2])));
      }
    }
  }
  map<pair<int, pair<int, int> >,
      vector<pair<int, pair<int, int> > > >::iterator it;
  for (it = adj.begin(); it != adj.end(); ++it) {
    if (it->second.size() != 3) return false;
  }
  for (it = adj.begin(); it != adj.end(); ++it) {
    long long x0 = it->first.first;
    long long y0 = it->first.second.first;
    long long z0 = it->first.second.second;
    for (int i = 0; i < it->second.size(); ++i) {
      long long x1 = it->second[i].first;
      long long y1 = it->second[i].second.first;
      long long z1 = it->second[i].second.second;
      for (int j = i + 1; j < it->second.size(); ++j) {
        long long x2 = it->second[j].first;
        long long y2 = it->second[j].second.first;
        long long z2 = it->second[j].second.second;
        if ((x1 - x0) * (x2 - x0) + (y1 - y0) * (y2 - y0) +
                (z1 - z0) * (z2 - z0) !=
            0)
          return false;
      }
    }
  }
  return true;
}
void rec(int k) {
  if (found) return;
  ;
  if (k == 8) {
    if (check()) {
      found = true;
    }
    return;
  }
  rec(k + 1);
  if (found) return;
  while (next_permutation(coor[k], coor[k] + 3)) {
    rec(k + 1);
    if (found) return;
  }
  sort(coor[k], coor[k] + 3);
}
int main() {
  for (int i = 0; i < 8; ++i) {
    cin >> coor[i][0] >> coor[i][1] >> coor[i][2];
    sort(coor[i], coor[i] + 3);
  }
  found = false;
  rec(1);
  if (found) {
    printf("YES\n");
    for (int i = 0; i < 8; ++i) {
      cout << coor[i][0] << " " << coor[i][1] << " " << coor[i][2] << endl;
    }
  } else
    printf("NO\n");
  return 0;
}
