#include <bits/stdc++.h>
using namespace std;
struct input {
  int a;
  int b;
};
int myfunc(input x, input y) {
  if (x.a > y.a) {
    return false;
  } else if (x.a < y.a) {
    return true;
  } else {
    if (x.b > y.b) {
      return false;
    } else {
      return true;
    }
  }
}
int main() {
  int n;
  cin >> n;
  vector<input> vec;
  input x;
  for (int i = 0; i < n; i++) {
    cin >> x.a;
    x.b = i + 1;
    vec.push_back(x);
  }
  sort(vec.begin(), vec.end(), myfunc);
  int times = 0;
  unsigned long long ways = 1;
  int last = vec.at(0).a;
  bool right = false;
  int pairs = 0;
  vector<int> ans1;
  vector<int> ans2;
  vector<int> ans3;
  int i;
  for (i = 0; i < n; i++) {
    if (last == vec.at(i).a) {
      times++;
    } else {
      ways *= times;
      if (times == 1) {
        ans1.push_back(vec.at(i - 1).b);
        ans2.push_back(vec.at(i - 1).b);
        ans3.push_back(vec.at(i - 1).b);
      } else if (times == 2) {
        pairs++;
        if (pairs >= 2) {
          ans1.push_back(vec.at(i - 2).b);
          ans1.push_back(vec.at(i - 1).b);
          ans2.push_back(vec.at(i - 1).b);
          ans2.push_back(vec.at(i - 2).b);
          ans3.push_back(vec.at(i - 2).b);
          ans3.push_back(vec.at(i - 1).b);
        } else {
          ans1.push_back(vec.at(i - 2).b);
          ans1.push_back(vec.at(i - 1).b);
          ans2.push_back(vec.at(i - 2).b);
          ans2.push_back(vec.at(i - 1).b);
          ans3.push_back(vec.at(i - 1).b);
          ans3.push_back(vec.at(i - 2).b);
        }
      } else if (times >= 3) {
        for (int j = i - 4; j >= i - times; j--) {
          ans1.push_back(vec.at(j).b);
          ans2.push_back(vec.at(j).b);
          ans3.push_back(vec.at(j).b);
        }
        ans1.push_back(vec.at(i - 3).b);
        ans1.push_back(vec.at(i - 2).b);
        ans1.push_back(vec.at(i - 1).b);
        ans2.push_back(vec.at(i - 2).b);
        ans2.push_back(vec.at(i - 3).b);
        ans2.push_back(vec.at(i - 1).b);
        ans3.push_back(vec.at(i - 3).b);
        ans3.push_back(vec.at(i - 1).b);
        ans3.push_back(vec.at(i - 2).b);
      }
      times = 1;
      last = vec.at(i).a;
    }
    if (i == n - 1) {
      ways *= times;
      if (times == 1) {
        ans1.push_back(vec.at(i).b);
        ans2.push_back(vec.at(i).b);
        ans3.push_back(vec.at(i).b);
      } else if (times == 2) {
        pairs++;
        if (pairs >= 2) {
          ans1.push_back(vec.at(i - 1).b);
          ans1.push_back(vec.at(i).b);
          ans2.push_back(vec.at(i).b);
          ans2.push_back(vec.at(i - 1).b);
          ans3.push_back(vec.at(i - 1).b);
          ans3.push_back(vec.at(i).b);
        } else {
          ans1.push_back(vec.at(i - 1).b);
          ans1.push_back(vec.at(i).b);
          ans2.push_back(vec.at(i - 1).b);
          ans2.push_back(vec.at(i).b);
          ans3.push_back(vec.at(i).b);
          ans3.push_back(vec.at(i - 1).b);
        }
      } else if (times >= 3) {
        for (int j = i - 3; j > i - times; j--) {
          ans1.push_back(vec.at(j).b);
          ans2.push_back(vec.at(j).b);
          ans3.push_back(vec.at(j).b);
        }
        ans1.push_back(vec.at(i - 2).b);
        ans1.push_back(vec.at(i - 1).b);
        ans1.push_back(vec.at(i).b);
        ans2.push_back(vec.at(i - 2).b);
        ans2.push_back(vec.at(i).b);
        ans2.push_back(vec.at(i - 1).b);
        ans3.push_back(vec.at(i - 1).b);
        ans3.push_back(vec.at(i - 2).b);
        ans3.push_back(vec.at(i).b);
      }
    }
    if (ways >= 3) {
      right = true;
    }
  }
  if (!right) {
    cout << "NO" << endl;
  } else {
    cout << "YES" << endl;
    for (int j = 0; j < n; j++) {
      cout << ans1.at(j) << " ";
    }
    cout << endl;
    for (int j = 0; j < n; j++) {
      cout << ans2.at(j) << " ";
    }
    cout << endl;
    for (int j = 0; j < n; j++) {
      cout << ans3.at(j) << " ";
    }
    cout << endl;
  }
  return 0;
}
