#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int n, msk, t[N], dis[N << 2], a[66], b[66], c[66], a1[66], b1[66], c1[66],
    tot[66], d1[N << 2], d2[N << 2], d3[N << 2];
int ans, ansa[N], ansb[N], ansc[N], pre[N << 2];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &t[i]);
  for (int i = 0; i < (1 << 6); i++) {
    queue<int> q;
    q.push(i);
    memset(dis, -1, sizeof(dis));
    dis[i] = 0;
    while (!q.empty()) {
      int x = q.front();
      q.pop();
      for (int j = 0; j < 12; j++)
        for (int k = j + 1; k < 12; k++) {
          int h = 2 * k - j, nw = x ^ (1 << j) ^ (1 << k) ^ (1 << h);
          if (h >= 12) continue;
          if (!~dis[nw]) {
            if (dis[x] == 1) {
              if (nw % (1 << 6) == 0) {
                a[i] = j;
                b[i] = k;
                c[i] = h;
                a1[i] = d1[x];
                b1[i] = d2[x];
                c1[i] = d3[x];
                tot[i] = nw >> 6;
              }
            } else {
              dis[nw] = 1;
              d1[nw] = j;
              d2[nw] = k;
              d3[nw] = h;
              q.push(nw);
            }
          }
        }
    }
  }
  while (n >= 18) {
    msk = 0;
    for (int i = n; i >= n - 5; i--) msk |= (t[i] << (n - i));
    ans++;
    ansa[ans] = n - a[msk];
    ansb[ans] = n - b[msk];
    ansc[ans] = n - c[msk];
    ans++;
    ansa[ans] = n - a1[msk];
    ansb[ans] = n - b1[msk];
    ansc[ans] = n - c1[msk];
    n -= 6;
    for (int i = n; i >= n - 5; i--)
      if (tot[msk] & (1 << (n - i))) t[i] ^= 1;
  }
  msk = 0;
  for (int i = 1; i <= n; i++) msk |= (t[i] << (i - 1));
  queue<int> q;
  q.push(0);
  memset(dis, -1, sizeof(dis));
  dis[0] = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    for (int j = 0; j < n; j++)
      for (int k = j + 1; k < n; k++) {
        int h = 2 * k - j, nw = x ^ (1 << j) ^ (1 << k) ^ (1 << h);
        if (h >= n) continue;
        if (!~dis[nw]) {
          dis[nw] = dis[x] + 1;
          d1[nw] = j;
          d2[nw] = k;
          d3[nw] = h;
          pre[nw] = x;
          q.push(nw);
        }
      }
  }
  if (!~dis[msk]) {
    printf("NO\n");
    return 0;
  }
  while (msk) {
    ans++;
    ansa[ans] = d1[msk] + 1;
    ansb[ans] = d2[msk] + 1;
    ansc[ans] = d3[msk] + 1;
    msk = pre[msk];
  }
  printf("YES\n%d\n", ans);
  for (int i = 1; i <= ans; i++)
    printf("%d %d %d\n", ansa[i], ansb[i], ansc[i]);
  return 0;
}
