#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
template <typename T>
using vec = vector<T>;
template <typename T>
using Prior = priority_queue<T>;
template <typename T>
using prior = priority_queue<T, vector<T>, greater<T>>;
const int INF = 1e9;
const int nINF = -1e9;
const ll llINF = 4 * 1e18;
const int MOD = 1e9 + 7;
ll& pmod(ll& a, ll b) {
  a = (a + b) % MOD;
  return a;
}
ll& pmod(ll& a, ll b, ll c) {
  a = (a + b) % c;
  return a;
}
ll& mmod(ll& a, ll b) {
  a = (a - b + MOD) % MOD;
  return a;
}
ll& mmod(ll& a, ll b, ll c) {
  a = (a - b + c) % c;
  return a;
}
ll& tmod(ll& a, ll b) {
  a = (a * b) % MOD;
  return a;
}
ll mul(ll a, ll b) { return (a * b) % MOD; }
ll mul(ll a, ll b, ll c) { return (a * b) % c; }
ll POW(ll a, ll b) {
  ll res = 1;
  do {
    if (b % 2) tmod(res, a);
    tmod(a, a);
  } while (b >>= 1);
  return res;
}
ll FAC(ll a) {
  ll res = 1;
  for (int i = 1; i <= a; i++) tmod(res, i);
  return res;
}
template <typename T1, typename T2>
ostream& operator<<(ostream& out, pair<T1, T2> a) {
  cout << a.first << ' ' << a.second;
  return out;
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0);
  int n;
  cin >> n;
  vec<int> _list(n);
  for (auto& i : _list) cin >> i;
  if (n % 2) {
    cout << "YES\n";
    cout << n - 2 << '\n';
    for (int i = 0; i < n - 2; i += 2)
      cout << i + 1 << ' ' << i + 2 << ' ' << i + 3 << '\n';
    for (int i = 0; i < n - 3; i += 2)
      cout << i + 1 << ' ' << i + 2 << ' ' << n << '\n';
  } else {
    int tmp = 0, idx = -1;
    for (int i = 0; i < n; i++) {
      tmp ^= _list[i];
      if (_list[i]) idx = i;
    }
    if (tmp != 0)
      cout << "NO\n";
    else {
      cout << "YES\n";
      cout << n - 2 << '\n';
      for (int i = 0; i < n - 2; i += 2)
        cout << i + 1 << ' ' << i + 2 << ' ' << i + 3 << '\n';
      for (int i = 0; i < n - 3; i += 2)
        cout << i + 1 << ' ' << i + 2 << ' ' << n << '\n';
    }
  }
}
