#include <bits/stdc++.h>   using namespace std;   struct input {     int a;     int b;   };   int myfunc(input x, input y) {     if (x.a > y.a) {       return false;     } else if (x.a < y.a) {       return true;     } else {       if (x.b > y.b) {         return false;       } else {         return true;       }     }   }   int main() {     int n;     cin >> n;     vector<input> vec;     input x;     for (int i = 0; i < n; i++) {       cin >> x.a;       x.b = i + 1;       vec.push_back(x);     }     sort(vec.begin(), vec.end(), myfunc);     int times = 0;     unsigned long long ways = 1;     int last = vec.at(0).a;     bool right = false;     int pairs = 0;     vector<int> ans1;     vector<int> ans2;     vector<int> ans3;     int i;     for (i = 0; i < n; i++) {       if (last == vec.at(i).a) {         times++;       } else {         ways *= times;         if (times == 1) {           ans1.push_back(vec.at(i - 1).b);           ans2.push_back(vec.at(i - 1).b);           ans3.push_back(vec.at(i - 1).b);         } else if (times == 2) {           pairs++;           if (pairs >= 2) {             ans1.push_back(vec.at(i - 2).b);             ans1.push_back(vec.at(i - 1).b);             ans2.push_back(vec.at(i - 1).b);             ans2.push_back(vec.at(i - 2).b);             ans3.push_back(vec.at(i - 2).b);             ans3.push_back(vec.at(i - 1).b);           } else {             ans1.push_back(vec.at(i - 2).b);             ans1.push_back(vec.at(i - 1).b);             ans2.push_back(vec.at(i - 2).b);             ans2.push_back(vec.at(i - 1).b);             ans3.push_back(vec.at(i - 1).b);             ans3.push_back(vec.at(i - 2).b);           }         } else if (times >= 3) {           for (int j = i - 4; j >= i - times; j--) {             ans1.push_back(vec.at(j).b);             ans2.push_back(vec.at(j).b);             ans3.push_back(vec.at(j).b);           }           ans1.push_back(vec.at(i - 3).b);           ans1.push_back(vec.at(i - 2).b);           ans1.push_back(vec.at(i - 1).b);           ans2.push_back(vec.at(i - 2).b);           ans2.push_back(vec.at(i - 3).b);           ans2.push_back(vec.at(i - 1).b);           ans3.push_back(vec.at(i - 3).b);           ans3.push_back(vec.at(i - 1).b);           ans3.push_back(vec.at(i - 2).b);         }         times = 1;         last = vec.at(i).a;       }       if (i == n - 1) {         ways *= times;         if (times == 1) {           ans1.push_back(vec.at(i).b);           ans2.push_back(vec.at(i).b);           ans3.push_back(vec.at(i).b);         } else if (times == 2) {           pairs++;           if (pairs >= 2) {             ans1.push_back(vec.at(i - 1).b);             ans1.push_back(vec.at(i).b);             ans2.push_back(vec.at(i).b);             ans2.push_back(vec.at(i - 1).b);             ans3.push_back(vec.at(i - 1).b);             ans3.push_back(vec.at(i).b);           } else {             ans1.push_back(vec.at(i - 1).b);             ans1.push_back(vec.at(i).b);             ans2.push_back(vec.at(i - 1).b);             ans2.push_back(vec.at(i).b);             ans3.push_back(vec.at(i).b);             ans3.push_back(vec.at(i - 1).b);           }         } else if (times >= 3) {           for (int j = i - 3; j > i - times; j--) {             ans1.push_back(vec.at(j).b);             ans2.push_back(vec.at(j).b);             ans3.push_back(vec.at(j).b);           }           ans1.push_back(vec.at(i - 2).b);           ans1.push_back(vec.at(i - 1).b);           ans1.push_back(vec.at(i).b);           ans2.push_back(vec.at(i - 2).b);           ans2.push_back(vec.at(i).b);           ans2.push_back(vec.at(i - 1).b);           ans3.push_back(vec.at(i - 1).b);           ans3.push_back(vec.at(i - 2).b);           ans3.push_back(vec.at(i).b);         }       }       if (ways >= 3) {         right = true;       }     }     if (!right) {       cout <<  NO  << endl;     } else {       cout <<  YES  << endl;       for (int j = 0; j < n; j++) {         cout << ans1.at(j) <<    ;       }       cout << endl;       for (int j = 0; j < n; j++) {         cout << ans2.at(j) <<    ;       }       cout << endl;       for (int j = 0; j < n; j++) {         cout << ans3.at(j) <<    ;       }       cout << endl;     }     return 0;   }