#include <bits/stdc++.h>
using namespace std;
const int MAX = 1e5 + 5, MOD = 1e9 + 7, MAXLG = log2(MAX) + 1;
const long long inf = 1e18 + 5;
int arr[MAX];
vector<int> v[10];
bool paisi = false;
struct point {
  long long x, y, z;
  point() {}
  point(long long x, long long y, long long z) : x(x), y(y), z(z) {}
  bool operator<(const point &a) const {
    if (x == a.x) {
      if (y == a.y) return z < a.z;
      return y < a.y;
    }
    return x < a.x;
  }
};
point get_line(point a, point b) {
  return point(b.x - a.x, b.y - a.y, b.z - a.z);
}
long long dis(point a, point b) {
  return (1ll * (b.x - a.x) * (b.x - a.x) + 1ll * (b.y - a.y) * (b.y - a.y) +
          1ll * (b.z - a.z) * (b.z - a.z));
}
long long dot(point a, point b) {
  return (1ll * a.x * b.x) + (1ll * a.y * b.y) + (1ll * a.z * b.z);
}
bool check(int idx, long long mn) {
  int a = -1, b = -1, c = -1;
  point pa, push_back, pc;
  point now = point(v[idx][0], v[idx][1], v[idx][2]);
  for (int i = 0; i < 8; i++) {
    if (i == idx) continue;
    long long d = dis(now, point(v[i][0], v[i][1], v[i][2]));
    if (d == mn) {
      if (a == -1)
        a = i, pa = point(v[i][0], v[i][1], v[i][2]);
      else if (b == -1)
        b = i, push_back = point(v[i][0], v[i][1], v[i][2]);
      else if (c == -1)
        c = i, pc = point(v[i][0], v[i][1], v[i][2]);
      else
        return false;
    }
  }
  if (a != -1 && b != -1 && c != -1 &&
      !dot(get_line(now, pa), get_line(now, push_back)) &&
      !dot(get_line(now, pa), get_line(now, pc)) &&
      !dot(get_line(now, push_back), get_line(now, pc)))
    return true;
  return false;
}
map<point, bool> vis;
void solve(int pos) {
  if (pos == 8) {
    long long mn = inf;
    for (int i = 1; i < 8; i++) {
      long long d = dis(point(v[0][0], v[0][1], v[0][2]),
                        point(v[i][0], v[i][1], v[i][2]));
      mn = min(mn, d);
    }
    for (int i = 0; i < 8; i++) {
      if (!check(i, mn)) return;
    }
    paisi = true;
    return;
  }
  do {
    point now = point(v[pos][0], v[pos][1], v[pos][2]);
    if (vis.find(now) != vis.end()) continue;
    vis[now] = true;
    solve(pos + 1);
    if (paisi) break;
    vis.erase(now);
  } while (next_permutation(v[pos].begin(), v[pos].end()));
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  ;
  for (int i = 0; i < 8; i++) {
    int a, b, c;
    cin >> a >> b >> c;
    v[i] = vector<int>{a, b, c};
    sort(v[i].begin(), v[i].end());
  }
  solve(0);
  if (paisi) {
    cout << "YES\n";
    for (int i = 0; i < 8; i++) {
      for (int x : v[i]) cout << x << " ";
      cout << "\n";
    }
  } else
    cout << "NO\n";
}
