#include <bits/stdc++.h>
using namespace std;
template <class T>
int len(const T& c) {
  return (int)c.size();
}
template <class T>
void cmin(T& a, T b) {
  if (b < a) a = b;
}
template <class T>
void cmax(T& a, T b) {
  if (b > a) a = b;
}
map<int, int> m;
vector<vector<int> > vpp;
priority_queue<pair<int, int> > p;
pair<int, int> p1, p2, p3;
int n, t;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i(0), _n(n); i < _n; ++i) {
    cin >> t;
    m[t]++;
  }
  for (__typeof((m).begin()) i = (m).begin(); i != (m).end(); ++i) {
    p.push(make_pair(i->second, i->first));
  }
  vector<int> temp(3);
  while (len(p) >= 3) {
    p1 = p.top();
    p.pop();
    p2 = p.top();
    p.pop();
    p3 = p.top();
    p.pop();
    temp[0] = p1.second;
    temp[1] = p2.second;
    temp[2] = p3.second;
    sort(temp.begin(), temp.end());
    reverse(temp.begin(), temp.end());
    vpp.push_back(temp);
    if (p1.first - 1 > 0) {
      p.push(make_pair(p1.first - 1, p1.second));
    }
    if (p2.first - 1 > 0) {
      p.push(make_pair(p2.first - 1, p2.second));
    }
    if (p3.first - 1 > 0) {
      p.push(make_pair(p3.first - 1, p3.second));
    }
  }
  cout << len(vpp) << endl;
  for (int i(0), _n(len(vpp)); i < _n; ++i)
    cout << vpp[i][0] << " " << vpp[i][1] << " " << vpp[i][2] << endl;
}
