#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, cnt;
unordered_map<long long, int> mp;
struct node {
  long long a, b, c;
} e[N];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    long long x;
    scanf("%lld", &x);
    mp[x]++;
  }
  unordered_map<long long, int>::iterator it;
  priority_queue<pair<long long, int> > q;
  for (it = mp.begin(); it != mp.end(); it++) {
    q.push({it->second, it->first});
  }
  while (q.size() >= 3) {
    pair<long long, int> n1 = q.top();
    q.pop();
    pair<long long, int> n2 = q.top();
    q.pop();
    pair<long long, int> n3 = q.top();
    q.pop();
    int tmp[] = {n1.second, n2.second, n3.second};
    sort(tmp, tmp + 3);
    e[cnt++] = {tmp[2], tmp[1], tmp[0]};
    n1.first--, n2.first--, n3.first--;
    if (n1.first > 0) q.push(n1);
    if (n2.first > 0) q.push(n2);
    if (n3.first > 0) q.push(n3);
  }
  cout << cnt << endl;
  for (int i = 0; i < cnt; i++) {
    printf("%lld %lld %lld\n", e[i].a, e[i].b, e[i].c);
  }
  return 0;
}
