#include <bits/stdc++.h>
using namespace std;
struct point {
  long long x;
  long long y;
  long long z;
};
vector<point> pts;
point get_point(const point& in, long long perm) {
  point ret;
  switch (perm) {
    case 0: {
      ret.x = in.x;
      ret.y = in.y;
      ret.z = in.z;
    } break;
    case 1: {
      ret.x = in.x;
      ret.y = in.z;
      ret.z = in.y;
    } break;
    case 2: {
      ret.x = in.z;
      ret.y = in.x;
      ret.z = in.y;
    } break;
    case 3: {
      ret.x = in.z;
      ret.y = in.y;
      ret.z = in.x;
    } break;
    case 4: {
      ret.x = in.y;
      ret.y = in.x;
      ret.z = in.z;
    } break;
    case 5: {
      ret.x = in.y;
      ret.y = in.z;
      ret.z = in.x;
    } break;
  }
  return ret;
}
long long get_dist(const point& p1, const point& p2) {
  return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y) +
         (p1.z - p2.z) * (p1.z - p2.z);
}
bool valid(const vector<long long>& st) {
  vector<long long> dists;
  long long sz = st.size();
  if (sz <= 2) return true;
  for (long long i = 0; i < sz; i++)
    for (long long j = i + 1; j < sz; j++) {
      long long dist =
          get_dist(get_point(pts[i], st[i]), get_point(pts[j], st[j]));
      if (dist == 0) return false;
      dists.push_back(dist);
    }
  sort(dists.begin(), dists.end());
  long long szd = dists.size();
  for (long long i = 1; i < szd; i++) {
    if (dists[i] == dists[0] || dists[i] == 2 * dists[0] ||
        dists[i] == 3 * dists[0])
      continue;
    else
      return false;
  }
  return true;
}
void dfs() {
  vector<long long> st;
  st.push_back(0);
  while (!st.empty()) {
    if (!valid(st)) {
      long long t = st.back();
      if (t < 5) {
        st.back()++;
      } else {
        while (st.back() == 5) st.pop_back();
        if (st.empty())
          return;
        else
          st.back()++;
      }
    } else if (st.size() == 8) {
      cout << "YES" << endl;
      for (long long i = 0; i < 8; i++) {
        point p = get_point(pts[i], st[i]);
        cout << p.x << " " << p.y << " " << p.z << endl;
      }
      exit(0);
    } else {
      st.push_back(0);
    }
  }
}
int main() {
  ios::sync_with_stdio(0);
  for (long long i = 0; i < 8; i++) {
    point p;
    cin >> p.x >> p.y >> p.z;
    pts.push_back(p);
  }
  dfs();
  cout << "NO" << endl;
  return 0;
}
