#include <bits/stdc++.h>
using namespace std;
vector<vector<int>> A(8);
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  for (int i = 0; i < 8; ++i) {
    int a, b, c;
    cin >> a >> b >> c;
    a *= 8, b *= 8, c *= 8;
    A[i] = {a, b, c};
    sort(A[i].begin(), A[i].end());
  }
  function<void(int)> dfs = [&](int i) {
    if (i == 8) {
      auto dis = [](vector<int> &a, vector<int> &b) {
        auto sq = [](int x) { return 1ll * x * x; };
        long long ret = 0;
        for (int i = 0; i < 3; ++i) {
          ret += sq(a[i] - b[i]);
        }
        return ret;
      };
      vector<long long> edge;
      for (int i = 0; i < 8; ++i) {
        for (int j = 0; j < i; ++j) {
          edge.emplace_back(dis(A[i], A[j]));
        }
      }
      sort(edge.begin(), edge.end());
      long long base = edge[0];
      if (base != 0 and
          count(edge.begin() + 00, edge.begin() + 12, base * 1) +
                  count(edge.begin() + 12, edge.begin() + 24, base * 2) +
                  count(edge.begin() + 24, edge.begin() + 28, base * 3) ==
              28) {
        cout << "YES\n";
        for (int i = 0; i < 8; ++i) {
          for (int j = 0; j < 3; ++j) {
            cout << A[i][j] / 8 << " \n"[j == 2];
          }
        }
        exit(0);
      }
    } else {
      do {
        dfs(i + 1);
      } while (next_permutation(A[i].begin(), A[i].end()));
    }
  };
  dfs(1);
  cout << "NO\n";
}
