#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
template <class T>
inline T absval(T a) {
  if (a < 0)
    return -a;
  else
    return a;
}
int toInt(string s) {
  istringstream iss(s);
  int res;
  if (!(iss >> res)) res = -1;
  return res;
}
string toString(int a) {
  ostringstream oss;
  oss << a;
  return oss.str();
}
vector<string> getTokens(string s, char delim) {
  vector<string> tokens;
  istringstream iss(s);
  string temp;
  while (getline(iss, temp, delim)) {
    tokens.push_back(temp);
  }
  return tokens;
}
const int MaxMatrixSize = 1000;
template <class T>
inline void printMat(int n, T A[MaxMatrixSize][MaxMatrixSize]) {
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) cout << A[i][j] << " ";
    cout << endl;
  }
}
template <class T>
inline void printVec(vector<T> A) {
  for (int i = 0; i < A.size(); i++) {
    cout << A[i] << " ";
  }
}
double dist(double x1, double y1, double x2, double y2) {
  return sqrt(sqr(x1 - x2) + sqr(y1 - y2));
}
double distR(double x1, double y1, double x2, double y2) {
  return sqr(x1 - x2) + sqr(y1 - y2);
}
class Compare {
 private:
  vector<int> a;

 public:
  Compare(vector<int> a_) : a(a_) {}
  bool operator()(int i, int j) {
    if (a[i - 1] < a[j - 1]) return true;
    return false;
  }
};
class Compares {
 private:
  vector<int> a;

 public:
  Compares(vector<int> a_) : a(a_) {}
  bool operator()(int i, int j) {
    if (a[i - 1] <= a[j - 1]) return true;
    return false;
  }
};
class Codeforces {
 public:
  void task(vector<int> a, int n) {
    int d[2003] = {0};
    int count = 0;
    bool flag = false;
    for (int i = (0); i < (n); i++) {
      d[a[i]]++;
    }
    int e = 0;
    for (int i = (0); i < (2003); i++) {
      if (d[i] >= 3) {
        flag = true;
        e = i;
        break;
      } else if (d[i] == 2) {
        count++;
        if (count == 2) {
          flag = true;
          e = i;
          break;
        }
      }
    }
    if (!flag) {
      cout << "NO\n";
      return;
    }
    cout << "YES\n";
    vector<int> g;
    for (int i = (0); i < (n); i++) {
      g.push_back(i + 1);
    }
    Compare comp = Compare(a);
    Compares comps = Compares(a);
    (sort(g.begin(), g.end(), comp));
    printVec(g);
    cout << "\n";
    count = 0;
    for (int i = (0); i < (n); i++) {
      if (i + 1 < n && a[g[i] - 1] == a[g[i + 1] - 1]) {
        int t = g[i];
        g[i] = g[i + 1];
        g[i + 1] = t;
        printVec(g);
        cout << "\n";
        count++;
        if (count == 2) break;
        continue;
      }
    }
    return;
  }
};
int main() {
  Codeforces cf = Codeforces();
  int n = 50;
  scanf("%d", &n);
  vector<int> a;
  a.resize(n);
  for (int i = (0); i < (n); i++) {
    scanf("%d", &a[i]);
  }
  cf.task(a, n);
  return 0;
}
