func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, r, R, k, l, A[100005];   string cad, aux;   char x, y;   map<int, int> M;   struct Res {     int X, Y, Z;     Res() {}     Res(int a, int b, int c) {       int F[5];       F[0] = a;       F[1] = b;       F[2] = c;       sort(F, F + 3);       X = F[2];       Y = F[1];       Z = F[0];     }   };   vector<Res> Sol;   struct node {     int elem, prio;     node() {}     node(int e, int p) {       elem = e;       prio = p;     }     bool operator<(const node &b) const {       if (prio != b.prio) return prio < b.prio;       return elem < b.elem;     }   };   priority_queue<node> q;   void calc() {     node n1, n2, n3;     int r;     Sol.clear();     while (1) {       if (q.empty()) return;       n1 = q.top();       q.pop();       if (q.empty()) return;       n2 = q.top();       q.pop();       if (q.empty()) return;       n3 = q.top();       q.pop();       r = 1;       for (int i = 0; i < r; i++) {         Sol.push_back(Res(n1.elem, n2.elem, n3.elem));       }       if (r != n1.prio) q.push(node(n1.elem, n1.prio - r));       if (r != n2.prio) q.push(node(n2.elem, n2.prio - r));       if (r != n3.prio) q.push(node(n3.elem, n3.prio - r));     }   }   int main() {     scanf( %d , &n);     M.clear();     for (int i = 0; i < n; i++) {       scanf( %d , &A[i]);     }     sort(A, A + n);     int c = 1;     for (int i = 1; i < n; i++)       if (A[i] != A[i - 1]) {         q.push(node(A[i - 1], c));         c = 1;       } else         c++;     q.push(node(A[n - 1], c));     calc();     cout << Sol.size() << endl;     for (int i = 0; i < Sol.size(); i++)       cout << Sol[i].X <<     << Sol[i].Y <<     << Sol[i].Z << endl;     return 0;   }   