#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int N = 5e5 + 10;
int n, arr[N];
vector<int> v[N];
set<int> s;
map<int, int> mm;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  for (int i = 0; i + 2 < n; i += 2) {
    arr[i] = arr[i + 1] = arr[i + 2] = (arr[i] ^ arr[i + 1] ^ arr[i + 2]);
  }
  for (int i = 0; i < n; i++) {
    s.insert(arr[i]);
  }
  int cnt = 0;
  for (auto it : s) {
    mm[it] = ++cnt;
  }
  for (int i = 0; i < n; i++) {
    v[mm[arr[i]]].push_back(i);
  }
  int odd = 0, indx = 1;
  for (int i = 1; i <= cnt; i++) {
    if ((int)v[i].size() % 2 == 1) {
      odd++;
      indx = i;
    }
  }
  if (odd > 1) {
    puts("NO");
    return 0;
  }
  cout << "YES\n";
  vector<tuple<int, int, int>> ans;
  for (int i = 0; i + 2 < n; i += 2) {
    ans.push_back(make_tuple(i, i + 1, i + 2));
  }
  for (int i = 1; i <= n; i++) {
    if (i == indx) continue;
    for (int j = 0; j < (int)v[i].size(); j += 2) {
      ans.push_back(make_tuple(v[indx].back(), v[i][j], v[i][j + 1]));
    }
  }
  cout << (int)ans.size() << '\n';
  for (int i = 0; i < (int)ans.size(); i++) {
    cout << get<0>(ans[i]) + 1 << " " << get<1>(ans[i]) + 1 << " "
         << get<2>(ans[i]) + 1 << "\n";
  }
  return 0;
}
