#include <bits/stdc++.h>
using namespace std;
long long a[100005];
map<long long, long long, greater<long long> > m, ans;
map<long long, long long, greater<long long> >::iterator it;
multimap<long long, long long, greater<long long> > se;
multimap<long long, long long, greater<long long> >::iterator sit, sit1, sit2,
    sit3;
long long f[100005], s[100005], t[100005];
long long Min(long long a, long long b, long long c) {
  return min(a, min(b, c));
}
long long Max(long long a, long long b, long long c) {
  return max(a, max(b, c));
}
long long tf = 0;
int main() {
  long long n;
  cin >> n;
  long long size = 0;
  for (long long i = 1; i <= n; i++) {
    cin >> a[i];
    m[a[i]]++;
  }
  for (it = m.begin(); it != m.end(); it++) {
    se.insert(make_pair(it->second, it->first));
    size++;
  }
  long long i = 0;
  while (se.size() >= 3) {
    sit1 = se.begin();
    sit = sit1;
    long long x1 = sit1->first;
    long long x2 = sit1->second;
    sit++;
    sit2 = sit;
    long long y1 = sit2->first;
    long long y2 = sit2->second;
    sit++;
    sit3 = sit;
    long long z1 = sit3->first;
    long long z2 = sit3->second;
    tf += 1;
    se.erase(sit1);
    se.erase(sit2);
    se.erase(sit3);
    if (x1 > 1) se.insert(make_pair(x1 - 1, x2));
    if (y1 > 1) se.insert(make_pair(y1 - 1, y2));
    if (z1 > 1) se.insert(make_pair(z1 - 1, z2));
    i++;
    f[i] = Max(x2, y2, z2);
    s[i] = x2 + y2 + z2 - Max(x2, y2, z2) - Min(x2, y2, z2);
    t[i] = Min(x2, y2, z2);
  }
  cout << tf << endl;
  for (int i = 1; i <= tf; i++)
    cout << f[i] << " " << s[i] << " " << t[i] << endl;
  return 0;
}
