#include <bits/stdc++.h>
using namespace std;
struct node {
  int x, index;
  node() {}
  node(int xx, int ii) { x = xx, index = ii; }
};
int v[2020];
node num[2020];
int n;
bool cmp(node a, node b) {
  return a.x < b.x || a.x == b.x && a.index < b.index;
}
void init() {
  memset(v, 0, sizeof(v));
  memset(num, 0, sizeof(num));
}
void pp() {
  int i;
  for (i = 0; i < n; i++) {
    printf("%d%c", num[i].index + 1, i == n - 1 ? '\n' : ' ');
  }
}
int main() {
  int i, j, k;
  bool flag;
  int Max, Min;
  while (cin >> n) {
    init();
    flag = false;
    Max = -1, Min = 3000;
    for (i = 0; i < n; i++) {
      cin >> num[i].x;
      num[i].index = i;
      if (num[i].x > Max) {
        Max = num[i].x;
      }
      if (num[i].x < Min) {
        Min = num[i].x;
      }
      v[num[i].x]++;
    }
    sort(num, num + n, cmp);
    int tem = 1;
    for (i = Min; i <= Max; i++) {
      if (v[i]) {
        tem *= v[i];
        if (tem >= 3) {
          flag = true;
          break;
        }
      }
    }
    if (flag) {
      puts("YES");
      pp();
      int tot = 0;
      for (i = 1; i < n; i++) {
        if (tot >= 2) {
          break;
        }
        if (num[i].x == num[i - 1].x) {
          node tem = num[i];
          num[i] = num[i - 1];
          num[i - 1] = tem;
          pp();
          tem = num[i];
          num[i] = num[i - 1];
          num[i - 1] = tem;
          tot++;
        }
      }
    } else {
      puts("NO");
    }
  }
  return 0;
}
