#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5;
int a[maxn + 5];
vector<int> ans[maxn + 5];
priority_queue<pair<int, int>, vector<pair<int, int> >, less<pair<int, int> > >
    Q;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), ans[i].clear();
  sort(a + 1, a + 1 + n);
  int last = 0;
  while (!Q.empty()) Q.pop();
  for (int i = 2; i <= n; i++) {
    if (a[i] != a[i - 1]) {
      Q.push(make_pair(i - 1 - last, a[i - 1]));
      last = i - 1;
    }
  }
  Q.push(make_pair(n - last, a[n]));
  int cnt = 0;
  while (Q.size() >= 3) {
    pair<int, int> x, y, z;
    x = Q.top();
    Q.pop();
    y = Q.top();
    Q.pop();
    z = Q.top();
    Q.pop();
    ans[++cnt].push_back(x.second);
    ans[cnt].push_back(y.second);
    ans[cnt].push_back(z.second);
    if (x.first - 1 >= 1) Q.push(make_pair(x.first - 1, x.second));
    if (y.first - 1 >= 1) Q.push(make_pair(y.first - 1, y.second));
    if (z.first - 1 >= 1) Q.push(make_pair(z.first - 1, z.second));
  }
  printf("%d\n", cnt);
  for (int i = 1; i <= cnt; i++) {
    if (ans[i][0] < ans[i][1]) swap(ans[i][0], ans[i][1]);
    if (ans[i][1] < ans[i][2]) swap(ans[i][1], ans[i][2]);
    if (ans[i][0] < ans[i][1]) swap(ans[i][0], ans[i][1]);
    printf("%d %d %d\n", ans[i][0], ans[i][1], ans[i][2]);
  }
  return 0;
}
