func_code_string: #include <bits/stdc++.h>   using namespace std;   struct node {     int a, ord;   } p[10005];   int b[10005];   bool cmp(node a, node b) { return a.a < b.a; }   int main() {     int n;     while (~scanf( %d , &n)) {       memset(b, 0, sizeof(b));       for (int i = 0; i < n; i++) {         scanf( %d , &p[i].a);         b[p[i].a]++;         p[i].ord = i + 1;       }       sort(p, p + n, cmp);       int sum = 1;       int ss[2], A = 0;       int sss = -1;       int flag = 1;       int i;       for (i = 1; i < n; i++) {         if (p[i].a == p[i - 1].a)           flag++;         else {           if (flag >= 3) {             sss = p[i - 1].a;             flag = -1;             break;           } else if (flag == 2)             ss[A++] = p[i - 1].a;           flag = 1;           if (A == 2) {             flag = -2;             break;           }         }       }       if (flag >= 3) {         sss = p[i - 1].a;         flag = -1;       } else if (flag == 2)         ss[A++] = p[i - 1].a;       flag = 1;       if (A == 2) {         flag = -2;       }       if (sss != -1) flag = -1;       if (flag > 0)         cout <<  NO  << endl;       else {         cout <<  YES  << endl;         if (flag == -1) {           for (int i = 0; i < 3; i++) {             flag = 1;             for (int j = 0; j < n; j++) {               if (j != 0) printf(   );               if (flag && p[j].a == sss) {                 if (i == 0)                   printf( %d %d %d , p[j].ord, p[j + 1].ord, p[j + 2].ord);                 else if (i == 1)                   printf( %d %d %d , p[j + 1].ord, p[j + 2].ord, p[j].ord);                 else                   printf( %d %d %d , p[j + 2].ord, p[j].ord, p[j + 1].ord);                 j += 2;                 flag = 0;               } else                 printf( %d , p[j].ord);             }             printf(  n );           }         } else {           for (int i = 0; i < 3; i++) {             for (int j = 0; j < n; j++) {               if (j != 0) printf(   );               if (i == 0 && p[j].a == ss[0]) {                 printf( %d %d , p[j].ord, p[j + 1].ord);                 j++;               } else if (i == 1 && p[j].a == ss[0]) {                 printf( %d %d , p[j + 1].ord, p[j].ord);                 j++;               } else if (i == 2 && p[j].a == ss[1]) {                 printf( %d %d , p[j + 1].ord, p[j].ord);                 j++;               } else                 printf( %d , p[j].ord);             }             printf(  n );           }         }       }     }     return 0;   }   