#include <bits/stdc++.h>
using namespace std;
int main() {
  cin.tie(0);
  std::ios::sync_with_stdio(false);
  long long n, l, ans = 0;
  cin >> n;
  map<long long, long long> mp;
  priority_queue<pair<long long, long long> > k;
  for (int i = 0; i < n; i++) {
    cin >> l;
    mp[l]++;
  }
  map<long long, long long>::iterator it1 = mp.begin();
  vector<long long> va;
  pair<long long, long long> f, s, t;
  for (; it1 != mp.end(); it1++) {
    k.push(make_pair(it1->second, it1->first));
  }
  while (!k.empty()) {
    if (!k.empty()) {
      f = k.top();
      k.pop();
    } else {
      break;
    }
    if (!k.empty()) {
      s = k.top();
      k.pop();
    } else {
      break;
    }
    if (!k.empty()) {
      t = k.top();
      k.pop();
    } else {
      break;
    }
    va.push_back(f.second);
    va.push_back(s.second);
    va.push_back(t.second);
    t.first--;
    f.first--;
    s.first--;
    if (f.first > 0) {
      k.push(f);
    }
    if (s.first > 0) {
      k.push(s);
    }
    if (t.first > 0) {
      k.push(t);
    }
  }
  ans = va.size() / 3;
  cout << ans << endl;
  while (ans != 0) {
    for (int i = 0; i < va.size(); i += 3) {
      if (va[i + 1] < va[i + 2]) {
        swap(va[i + 1], va[i + 2]);
      }
      if (va[i] < va[i + 1]) {
        swap(va[i], va[i + 1]);
      }
      if (va[i + 1] < va[i + 2]) {
        swap(va[i + 1], va[i + 2]);
      }
      cout << va[i] << " " << va[i + 1] << " " << va[i + 2];
      if ((i) % 3 == 0) {
        cout << endl;
        ans--;
      }
    }
  }
}
