#include <bits/stdc++.h>
using namespace std;
struct SnowMen {
  int cnt;
  int max;
  int mid;
  int min;
  SnowMen(int _cnt, int _max, int _mid, int _min)
      : cnt(_cnt), max(_max), mid(_mid), min(_min) {}
  friend ostream& operator<<(ostream& ost, const SnowMen& sn);
};
ostream& operator<<(ostream& ost, const SnowMen& sn) {
  for (int i = 0; i < sn.cnt; i++) {
    ost << sn.max << " " << sn.mid << " " << sn.min << '\n';
  }
  return ost;
}
int main() {
  vector<SnowMen> output;
  map<int, int> radiMap;
  int N, r;
  cin >> N;
  for (int i = 0; i < N; i++) {
    cin >> r;
    radiMap[r] += 1;
  }
  priority_queue<pair<int, int> > pque;
  for (auto it : radiMap) {
    pque.push(make_pair(it.second, it.first));
  }
  int res = 0;
  while (pque.size() >= 3) {
    pair<int, int> x = pque.top();
    pque.pop();
    pair<int, int> y = pque.top();
    pque.pop();
    pair<int, int> z = pque.top();
    pque.pop();
    int tp = pque.empty() ? 0 : pque.top().first;
    int add = min(z.first, z.first - tp + 1);
    res += add;
    int _max = max(x.second, max(y.second, z.second));
    int _min = min(x.second, min(y.second, z.second));
    int _mid = x.second ^ y.second ^ z.second ^ _max ^ _min;
    output.push_back(SnowMen(add, _max, _mid, _min));
    if (x.first - add > 0) pque.push(make_pair(x.first - add, x.second));
    if (y.first - add > 0) pque.push(make_pair(y.first - add, y.second));
    if (z.first - add > 0) pque.push(make_pair(z.first - add, z.second));
  }
  cout << res << endl;
  for (unsigned i = 0; i < output.size(); i++) {
    cout << output[i];
  }
}
