#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n, a[N];
vector<pair<int, int> > autotrans(int *a, int *en, bool lim) {
  int len = en - a, ret = 0;
  for (int i = 0; i < len; ++i)
    if (a[i] == 1) ret |= 1 << i;
  queue<int> q;
  q.push(ret);
  map<int, bool> vis;
  vis[ret] = 1;
  map<int, vector<pair<int, int> > > g;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    for (int i = 0; i < len; ++i)
      for (int d = 1; lim ? (i - d - d >= 0) : d <= len; ++d) {
        int y = x ^ (1 << i);
        if (i - d >= 0) y ^= 1 << (i - d);
        if (i - d - d >= 0) y ^= 1 << (i - d - d);
        if (!vis[y]) {
          vis[y] = 1;
          g[y] = g[x];
          g[y].push_back(pair<int, int>(i, d));
          if (y == 0) return g[y];
          q.push(y);
        }
      }
  }
  return vector<pair<int, int> >();
}
void OUT(const vector<pair<int, int> > &g) {
  if (!g.size())
    cout << "NO";
  else {
    cout << "YES\n";
    cout << g.size() << '\n';
    for (auto i : g) {
      cout << i.first - i.second - i.second + 1 << " " << i.first - i.second + 1
           << " " << i.first + 1 << '\n';
    }
  }
  exit(0);
}
vector<pair<int, int> > sol[1 << 6];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  bool fl = 0;
  for (int i = 1; i <= n; ++i)
    if (a[i]) fl = 1;
  if (!fl) return puts("YES\n0"), 0;
  if (n <= 12) {
    OUT(autotrans(a + 1, a + n + 1, 1));
  }
  for (int i = 0; i < (1 << 6); ++i) {
    int need[10];
    for (int j = 0; j < 6; ++j)
      if (i & (1 << j))
        need[j] = 1;
      else
        need[j] = 0;
    sol[i] = autotrans(need, need + 6, 0);
    if (i) assert(sol[i].size());
  }
  vector<pair<int, int> > ans;
  while (n > 15) {
    int tmp = 0;
    for (int j = n - 5; j <= n; ++j) tmp |= a[j] << (j - n + 5);
    vector<pair<int, int> > tonight = sol[tmp];
    for (auto &j : tonight) j.first += n - 6;
    for (auto j : tonight) {
      a[j.first + 1] ^= 1;
      a[j.first + 1 - j.second] ^= 1;
      a[j.first + 1 - j.second - j.second] ^= 1;
    }
    n -= 6;
    ans.insert(ans.end(), tonight.begin(), tonight.end());
  }
  vector<pair<int, int> > tonight = autotrans(a + 1, a + n + 1, 1);
  ans.insert(ans.end(), tonight.begin(), tonight.end());
  OUT(ans);
}
