#include <bits/stdc++.h>
using namespace std;
const int MAXN = 20001;
int c[MAXN];
class Record {
 public:
  int height, index;
};
vector<Record> v;
bool cmp(Record a, Record b) {
  if (a.height < b.height)
    return true;
  else
    return false;
}
void show() {
  for (int i = 0; i < v.size(); i++) {
    printf("%d", v[i].index);
    if (i == v.size() - 1)
      printf("\n");
    else
      printf(" ");
  }
}
int main() {
  int n;
  int h[MAXN];
  int minh, maxh;
  Record r;
  while (1 == scanf("%d", &n)) {
    memset(c, 0, sizeof(c));
    v.clear();
    minh = 20000;
    maxh = 0;
    for (int i = 0; i < n; i++) {
      scanf("%d", &h[i]);
      minh = min(minh, h[i]);
      maxh = max(maxh, h[i]);
      r.height = h[i];
      r.index = i + 1;
      v.push_back(r);
      c[h[i]]++;
    }
    int counter = 0;
    for (int i = minh; i <= maxh; i++) {
      if (c[i] == 2)
        counter++;
      else if (c[i] > 2)
        counter += 2;
    }
    if (counter < 2) {
      printf("NO\n");
      continue;
    }
    sort(v.begin(), v.end(), cmp);
    printf("YES\n");
    show();
    int lines = 1;
    for (int i = 0; i < v.size() - 1; i++) {
      if (c[v[i].height] < 2) {
        continue;
      }
      if (v[i].height != v[i + 1].height) continue;
      int tmp = v[i].index;
      v[i].index = v[i + 1].index;
      v[i + 1].index = tmp;
      show();
      lines++;
      if (lines >= 3) break;
    }
  }
  return 0;
}
