#include <bits/stdc++.h>
using namespace std;
long long n;
struct task {
  long long num, cnt;
} t[2024];
long long vis[2024];
bool cmp(task a, task b) { return a.num < b.num; }
int main() {
  while (~scanf("%lld", &n)) {
    long long flag = 1;
    long long g1, g2;
    long long count = 0;
    memset(vis, 0, sizeof(vis));
    for (int i = 1; i <= n; i++) {
      scanf("%lld", &t[i].num);
      t[i].cnt = i;
      if (vis[t[i].num]) count++;
      vis[t[i].num]++;
    }
    sort(t + 1, t + n + 1, cmp);
    if (count < 2)
      printf("NO\n");
    else {
      int flag1 = 0;
      printf("YES\n");
      for (int i = 1; i <= n; i++) {
        printf("%lld ", t[i].cnt);
        if (i > 1 && t[i].num == t[i - 1].num && flag1 == 0) {
          g1 = i;
          flag1++;
          continue;
        }
        if (i > 1 && t[i].num == t[i - 1].num && flag1 == 1) {
          g2 = i;
          flag1++;
          continue;
        }
      }
      printf("\n");
      for (int i = 1; i <= n; i++) {
        if (i == g1 - 1)
          printf("%lld ", t[i + 1].cnt);
        else if (i == g1)
          printf("%lld ", t[i - 1].cnt);
        else
          printf("%lld ", t[i].cnt);
      }
      printf("\n");
      for (int i = 1; i <= n; i++) {
        if (i == g2 - 1)
          printf("%lld ", t[i + 1].cnt);
        else if (i == g2)
          printf("%lld ", t[i - 1].cnt);
        else
          printf("%lld ", t[i].cnt);
      }
      printf("\n");
    }
  }
}
