#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const int N = 100010;
const long long mod = 1e6 + 3;
const double esp = 1e-6;
void print(int a, int b, int c) {
  int mi = min(a, min(b, c));
  int mx = max(a, max(b, c));
  int me;
  if (a != mi && a != mx) me = a;
  if (b != mi && b != mx) me = b;
  if (c != mi && c != mx) me = c;
  printf("%d %d %d\n", mx, me, mi);
}
map<int, int> mp;
int ans[N][3];
struct asd {
  int id;
  int v;
  bool operator<(const asd &a) const { return v < a.v; }
};
int a[N];
int main() {
  int n;
  cin >> n;
  priority_queue<asd> Q;
  int f = 0;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    if (mp[x] == 0) a[f++] = x;
    mp[x]++;
  }
  for (int i = 0; i < f; i++) {
    asd x;
    x.id = a[i];
    x.v = mp[a[i]];
    Q.push(x);
  }
  int k = 0;
  while (Q.size() >= 3) {
    asd x = Q.top();
    Q.pop();
    x.v--;
    asd y = Q.top();
    Q.pop();
    y.v--;
    asd z = Q.top();
    Q.pop();
    z.v--;
    ans[k][0] = x.id;
    ans[k][1] = y.id;
    ans[k][2] = z.id;
    if (x.v) Q.push(x);
    if (y.v) Q.push(y);
    if (z.v) Q.push(z);
    k++;
  }
  cout << k << endl;
  for (int i = 0; i < k; i++) {
    print(ans[i][0], ans[i][1], ans[i][2]);
  }
  return 0;
}
