#include <bits/stdc++.h>
using namespace std;
int n, has[3000] = {0}, js[3000];
vector<int> vt[3000];
vector<int> ans;
int main(int argc, const char* argv[]) {
  scanf("%d", &n);
  for (int i = 1; i < (n + 1); i++) {
    int x;
    scanf("%d", &x);
    vt[x].push_back(i);
    has[x]++;
  }
  int tot = 1;
  bool flag = false;
  for (int i = 1; i < (2000 + 1); i++)
    if (has[i] > 0) {
      tot *= has[i];
      if (tot >= 3) {
        flag = true;
        break;
      }
    }
  if (!flag)
    printf("NO\n");
  else {
    printf("YES\n");
    int cnt = 0;
    bool fl = false;
    for (int i = 1; i < (2000 + 1); i++)
      if (vt[i].size() >= 3) {
        fl = true;
        for (int j = 1; j < (vt[i].size() + 1); j++) js[j] = j;
        do {
          ans.clear();
          cnt++;
          if (cnt > 3) break;
          for (int j = 1; j < (i - 1 + 1); j++)
            if (vt[j].size())
              for (int k = 0; k < (vt[j].size() - 1 + 1); k++)
                ans.push_back(vt[j][k]);
          for (int j = 1; j < (vt[i].size() + 1); j++)
            ans.push_back(vt[i][js[j] - 1]);
          for (int j = i + 1; j < (2000 + 1); j++)
            if (vt[j].size())
              for (int k = 0; k < (vt[j].size() - 1 + 1); k++)
                ans.push_back(vt[j][k]);
          for (int j = 0; j < (ans.size() - 1 + 1); j++)
            if (j == ans.size() - 1)
              printf("%d\n", ans[j]);
            else
              printf("%d ", ans[j]);
        } while (next_permutation(js + 1, js + 1 + vt[i].size()));
        if (cnt > 3) break;
      }
    if (!fl) {
      int x1 = 0, x2 = 0;
      for (int i = 1; i < (2000 + 1); i++)
        if (vt[i].size() == 2) {
          if (x1 == 0)
            x1 = i;
          else if (x2 == 0)
            x2 = i;
          else
            break;
        }
      ans.clear();
      for (int i = 1; i < (2000 + 1); i++)
        if (vt[i].size()) {
          for (int j = 0; j < (vt[i].size() - 1 + 1); j++)
            ans.push_back(vt[i][j]);
        }
      for (int i = 0; i < (ans.size() - 1 + 1); i++)
        if (i == ans.size() - 1)
          printf("%d\n", ans[i]);
        else
          printf("%d ", ans[i]);
      ans.clear();
      for (int i = 1; i < (2000 + 1); i++)
        if (vt[i].size()) {
          if (i == x1) {
            ans.push_back(vt[i][1]);
            ans.push_back(vt[i][0]);
          } else
            for (int j = 0; j < (vt[i].size() - 1 + 1); j++)
              ans.push_back(vt[i][j]);
        }
      for (int i = 0; i < (ans.size() - 1 + 1); i++)
        if (i == ans.size() - 1)
          printf("%d\n", ans[i]);
        else
          printf("%d ", ans[i]);
      ans.clear();
      for (int i = 1; i < (2000 + 1); i++)
        if (vt[i].size()) {
          if (i == x2) {
            ans.push_back(vt[i][1]);
            ans.push_back(vt[i][0]);
          } else
            for (int j = 0; j < (vt[i].size() - 1 + 1); j++)
              ans.push_back(vt[i][j]);
        }
      for (int i = 0; i < (ans.size() - 1 + 1); i++)
        if (i == ans.size() - 1)
          printf("%d\n", ans[i]);
        else
          printf("%d ", ans[i]);
      ans.clear();
    }
  }
  return 0;
}
