#include <bits/stdc++.h>
using namespace std;
inline int gi() {
  char c = getchar();
  while (c < '0' || c > '9') c = getchar();
  int sum = 0;
  while ('0' <= c && c <= '9') sum = sum * 10 + c - 48, c = getchar();
  return sum;
}
const int maxn = 100005;
int n, a[maxn], cnt[maxn], p[maxn][3], val[maxn];
priority_queue<pair<int, int>> que;
int main() {
  n = gi();
  for (int i = 1; i <= n; ++i) a[i] = gi();
  sort(a + 1, a + n + 1);
  for (int i = 1, m = 0, lst = -1; i <= n; ++i)
    if (a[i] == lst)
      ++cnt[m];
    else
      lst = a[i], ++m, val[m] = a[i], ++cnt[m];
  for (int i = 1; i <= n; ++i)
    if (cnt[i]) que.push(make_pair(cnt[i], val[i]));
  pair<int, int> x, y, z;
  int ans = 0;
  while (que.size() >= 3) {
    x = que.top();
    que.pop();
    y = que.top();
    que.pop();
    z = que.top();
    que.pop();
    ++ans;
    p[ans][0] = x.second;
    p[ans][1] = y.second;
    p[ans][2] = z.second;
    sort(p[ans], p[ans] + 3, greater<int>());
    if (x.first > 1) --x.first, que.push(x);
    if (y.first > 1) --y.first, que.push(y);
    if (z.first > 1) --z.first, que.push(z);
  }
  printf("%d\n", ans);
  for (int i = 1; i <= ans; ++i)
    printf("%d %d %d\n", p[i][0], p[i][1], p[i][2]);
  return 0;
}
