#include <bits/stdc++.h>
using namespace std;
ifstream in;
ofstream out;
const long long kk = 1000;
const long long ml = kk * kk;
const long long mod = ml * kk + 7;
const long long inf = ml * ml * ml + 7;
long long n, i, j;
vector<long long> m, m2;
vector<vector<long long> > ans;
set<long long> black;
bool viv = false;
void work2(vector<long long> v) {
  for (auto i : v) m2[i] ^= 1;
  ans.push_back(v);
}
void easy() {
  vector<vector<long long> > var;
  for (long long i = 0; i < n; i++)
    for (long long j = i + 1; j < n; j++)
      for (long long u = j + 1; u < n; u++)
        if (u + i == 2 * j) var.push_back({i, j, u});
  long long l = var.size();
  m2.resize(n);
  for (long long q = 0; q < (1ll << l); q++) {
    long long q1 = q;
    ans.clear();
    for (auto &i : m2) i = 0;
    vector<bool> will;
    for (i = 0; i < l; i++) {
      if (q1 & 1) work2(var[i]);
      q1 >>= 1;
    }
    if (m2 == m) {
      cout << "YES" << endl;
      cout << ans.size() << endl;
      for (auto i : ans) {
        for (auto j : i) cout << j + 1 << ' ';
        cout << endl;
      }
      exit(0);
    }
  }
  cout << "NO";
  exit(0);
}
void work(long long a, long long b, long long c) {
  if (viv) {
    for (auto i : m) cout << i << ' ';
    cout << endl;
  }
  m[a] ^= 1;
  m[b] ^= 1;
  m[c] ^= 1;
  if (viv) {
    for (auto i : m) cout << i << ' ';
    cout << endl;
    cout << endl;
  }
  ans.push_back({a, b, c});
  for (auto i : ans.back())
    if (black.find(i) != black.end())
      black.erase(i);
    else
      black.insert(i);
}
void remove(long long x) {
  work(x, x + 3, x + 6);
  work(x + 3, x + 4, x + 5);
  work(x + 4, x + 5, x + 6);
}
void run() {
  bool cont = true;
  long long kol = 0;
  while (cont && kol < 7000) {
    cont = false;
    for (long long j = 0; j < 7000; j++)
      if (black.size()) {
        long long a = rand() % n;
        long long b = rand() % n;
        long long c = 2 * b - a;
        if (a != b && c < n && c >= 0 && m[a] && m[b] && m[c])
          cont = true, work(a, b, c);
      }
    kol++;
  }
}
void haters() {
  for (i = n - 1; i >= 0; i--)
    for (j = 1; j <= 4002; j++)
      if (i - 2 * j >= 0)
        if (m[i] && m[i - j] && m[i - 2 * j]) work(i, i - j, i - 2 * j);
  run();
  long long j = n - 1;
  while (j >= 6) {
    if (m[j]) {
      vector<long long> last;
      for (long long u = j - 5; u <= j; u++) last.push_back(m[u]);
      if (last[3] && last[4])
        work(j - 2, j - 1, j);
      else {
        if (last[3])
          work(j - 4, j - 2, j);
        else {
          if (last[4]) {
            work(j - 2, j - 1, j);
          } else {
            long long near = 0;
            if (black.size() > 1) long long near = *(black.rbegin()--);
            long long l = min(j / 2, j - near);
            work(j - 2 * l, j - l, j);
          }
        }
      }
    }
    j--;
  }
  while (j >= 2) {
    if (m[j]) work(j - 2, j - 1, j);
    j--;
  }
}
int main() {
  srand(time(0));
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (i = 0; i < n; i++) {
    long long a;
    cin >> a;
    m.push_back(a);
    if (m[i]) black.insert(i);
  }
  if (n < 8) easy();
  haters();
  for (i = 0; i < 2; i++)
    if (m[i]) remove(i);
  cout << "YES" << endl;
  cout << ans.size() << endl;
  for (auto i : ans) {
    for (auto j : i) cout << j + 1 << ' ';
    cout << '\n';
  }
  return 0;
}
