#include <bits/stdc++.h>
using namespace std;
int n, i, j, pol, b[20001], flag, P;
struct task {
  int r, d;
} a[20001];
int cmp(const task &L, const task &R) {
  return L.d == R.d ? L.r - R.r < 0 : L.d - R.d < 0;
}
int main() {
  pol = 0;
  memset(a, 0, sizeof(a));
  memset(b, 0, sizeof(b));
  while (scanf("%d", &n) != EOF) {
    for (i = 1; i <= n; i++) {
      scanf("%d", &a[i].d);
      a[i].r = i;
      b[a[i].d]++;
    }
    sort(a + 1, a + 1 + n, cmp);
    for (flag = 0, P = 1, i = 1; i <= 2000; i++) {
      if (b[i] >= 3) {
        printf("YES\n");
        for (pol = 1; pol <= 3; pol++) {
          for (flag = 0, j = 1; j <= n; j++) {
            if (j != 1) printf(" ");
            if (a[j].d != i || flag)
              printf("%d", a[j].r);
            else {
              printf("%d %d %d", a[j + pol % 3].r, a[j + (pol + 1) % 3].r,
                     a[j + (pol + 2) % 3].r);
              j = j + 2;
              flag = 1;
            }
          }
          printf("\n");
        }
        P = 0;
        break;
      }
      if (b[i] == 2) {
        if (flag == 0)
          flag = i;
        else {
          printf("YES\n");
          for (pol = 1; pol <= 3; pol++) {
            for (j = 1; j <= n; j++) {
              if (j != 1) printf(" ");
              if (a[j].d != flag && a[j].d != i)
                printf("%d", a[j].r);
              else {
                if (a[j].d == flag) {
                  printf("%d %d",
                         a[j + (pol % 2 == 0 ? 1 : (pol == 1 ? 0 : 1))].r,
                         a[j + (pol % 2 == 0 ? 0 : (pol == 1 ? 1 : 0))].r);
                  j++;
                }
                if (a[j].d == i) {
                  printf("%d %d", a[j + (pol % 2 == 0 ? 1 : 0)].r,
                         a[j + (pol % 2 == 0 ? 0 : 1)].r);
                  j++;
                }
              }
            }
            printf("\n");
          }
          P = 0;
          break;
        }
      }
    }
    if (P == 1) printf("NO\n");
  }
  return 0;
}
