#include <bits/stdc++.h>
using namespace std;
int ans[4][2005] = {0}, n, k;
vector<pair<int, int> > G;
vector<int> a[2005];
void func(vector<int> Q) {
  int s1 = Q.size(), i;
  if (k == 3) return;
  if (s1 == n) {
    for (i = 0; i < n; i++) printf("%d ", Q[i]);
    printf("\n");
    k++;
    return;
  }
  int visited[2005] = {0};
  for (i = 0; i < s1; i++) visited[Q[i]] = 1;
  int u = G[s1].first;
  int s2 = a[u].size();
  Q.push_back(0);
  for (i = 0; i < s2; i++) {
    if (!visited[a[u][i]]) {
      Q[s1] = a[u][i];
      func(Q);
    }
  }
}
int main() {
  int i, f = 0, c = 0;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    int x;
    scanf("%d", &x);
    G.push_back(pair<int, int>(x, i));
    a[x].push_back(i);
    if (a[x].size() >= 3) f = 1;
  }
  for (i = 1; i <= 2000; i++) {
    if (a[i].size() > 1) c++;
    if (c > 1) f = 1;
  }
  sort(G.begin(), G.end());
  if (f == 0) {
    printf("NO\n");
    return 0;
  } else {
    printf("YES\n");
    for (i = 0; i < n; i++) {
      printf("%d ", G[i].second);
    }
    printf("\n");
    for (i = 0; i < n; i++) {
      if (i > 0 && G[i].first == G[i - 1].first) {
        pair<int, int> temp = G[i];
        G[i] = G[i - 1];
        G[i - 1] = temp;
        break;
      }
    }
    for (i = 0; i < n; i++) {
      printf("%d ", G[i].second);
    }
    printf("\n");
    for (i = n - 1; i >= 0; i--) {
      if (i > 0 && G[i].first == G[i - 1].first) {
        pair<int, int> temp = G[i];
        G[i] = G[i - 1];
        G[i - 1] = temp;
        break;
      }
    }
    for (i = 0; i < n; i++) {
      printf("%d ", G[i].second);
    }
  }
  return 0;
}
