#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) {
  while (b ^= a ^= b ^= a %= b)
    ;
  return a;
}
const int maxn = 2e5 + 9;
const int mod = 1e9 + 7;
struct A {
  int id;
  int num;
} p[maxn];
int a[maxn];
bool operator<(A a, A b) {
  if (a.num == b.num) return a.id < b.id;
  return a.num < b.num;
}
priority_queue<A> q;
int ans[maxn];
int main() {
  int n;
  int cnt = 0;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
  }
  sort(a + 1, a + n + 1);
  a[n + 1] = -1;
  int num = 0;
  for (int i = 1; i <= n + 1; i++) {
    if (a[i] != a[i - 1]) {
      p[cnt].id = a[i - 1];
      p[cnt++].num = num;
      num = 0;
    }
    num++;
  }
  for (int i = 1; i < cnt; i++) {
    q.push(p[i]);
  }
  int cntt = 0;
  while (q.size() >= 3) {
    A t = q.top();
    q.pop();
    A tt = q.top();
    q.pop();
    A ttt = q.top();
    q.pop();
    int tmp[4];
    tmp[0] = t.id;
    tmp[1] = tt.id;
    tmp[2] = ttt.id;
    sort(tmp, tmp + 3);
    reverse(tmp, tmp + 3);
    ans[cntt++] = tmp[0];
    ans[cntt++] = tmp[1];
    ans[cntt++] = tmp[2];
    t.num--;
    if (t.num != 0) q.push(t);
    tt.num--;
    if (tt.num != 0) q.push(tt);
    ttt.num--;
    if (ttt.num != 0) q.push(ttt);
  }
  cout << cntt / 3 << endl;
  for (int i = 0; i < cntt; i++) {
    if (i % 3 == 0 && i != 0) cout << endl;
    cout << ans[i] << " ";
  }
  return 0;
}
