#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
template <class T>
inline T SQR(T a) {
  return a * a;
}
int C[100001][3];
bool can(int *A, int n, int k) {
  int pos = k;
  for (int i = (0), ei = (k); i < ei; i++) C[i][0] = A[i];
  int cnt = 0;
  while (pos < n && cnt < k) {
    if (A[pos] < C[cnt][0]) C[cnt++][1] = A[pos];
    pos++;
  }
  if (cnt != k) return false;
  cnt = 0;
  while (pos < n && cnt < k) {
    if (A[pos] < C[cnt][1]) C[cnt++][2] = A[pos];
    pos++;
  }
  return cnt == k;
}
int main() {
  int n;
  int A[100001];
  cin >> n;
  for (int i = (0), ei = (n); i < ei; i++) scanf("%d", A + i);
  sort(A, A + n, greater<int>());
  int l = 0, r = n / 3;
  int ans = 0;
  while (l <= r) {
    int c = (l + r) >> 1;
    if (can(A, n, c)) {
      l = c + 1;
      ans = c;
    } else
      r = c - 1;
  }
  can(A, n, ans);
  printf("%d\n", ans);
  for (int i = (0), ei = (ans); i < ei; i++)
    printf("%d %d %d\n", C[i][0], C[i][1], C[i][2]);
  return 0;
}
