#include <bits/stdc++.h>
struct opts {
  int a, b, c;
};
std::vector<opts> V, T;
int n, a[100005], b[100005], m;
bool finish = 0;
inline void reverse(int x, int y, int z) {
  a[x] ^= 1, a[y] ^= 1, a[z] ^= 1;
  V.push_back((opts){x, y, z});
  --m;
}
inline void reverse(opts b) { a[b.a] ^= 1, a[b.b] ^= 1, a[b.c] ^= 1; }
inline bool chk(int l, int r) {
  for (int i = l; i <= r; ++i)
    if (a[i]) return 0;
  return 1;
}
void find(int l, int r) {
  for (int i = l; i <= r; ++i) b[i] = a[i];
  for (int i = l; i <= r; ++i)
    for (int j = i + 2; j <= r; j += 2) T.push_back((opts){i, i + j >> 1, j});
  int sz = T.size(), C = 1 << sz;
  for (int i = 0; i < C; ++i)
    if (__builtin_popcount(i) <= m) {
      for (int i = l; i <= r; ++i) a[i] = b[i];
      for (int j = 0; j < sz; ++j)
        if (i >> j & 1) reverse(T[j]);
      if (chk(l, r)) {
        finish = 1;
        for (int j = 0; j < sz; ++j)
          if (i >> j & 1) V.push_back(T[j]);
        return;
      }
    }
}
void solve(int l, int r) {
  if (r - l + 1 <= 8) {
    while (r - l + 1 < 8 && l > 1) --l;
    while (r - l + 1 < 8 && r < n) ++r;
    find(l, r);
    return;
  }
  if (!a[l]) return solve(l + 1, r);
  if (!a[r]) return solve(l, r - 1);
  if (((a[l] == 1) && (a[l + 1] == 0) && (a[l + 2] == 1))) {
    reverse(l, l + 2, l + 4);
    return solve(l + 3, r);
  }
  if (((a[l] == 1) && (a[l + 1] == 0) && (a[l + 2] == 0))) {
    reverse(l, l + 3, l + 6);
    return solve(l + 3, r);
  }
  if (((a[l] == 1) && (a[l + 1] == 1) && (a[l + 2] == 1))) {
    reverse(l, l + 1, l + 2);
    return solve(l + 3, r);
  }
  if (((a[r - 2] == 1) && (a[r - 2 + 1] == 0) && (a[r - 2 + 2] == 1))) {
    reverse(r - 4, r - 2, r);
    return solve(l, r - 3);
  }
  if (((a[r - 2] == 0) && (a[r - 2 + 1] == 0) && (a[r - 2 + 2] == 1))) {
    reverse(r - 6, r - 3, r);
    return solve(l, r - 3);
  }
  if (((a[r - 2] == 1) && (a[r - 2 + 1] == 1) && (a[r - 2 + 2] == 1))) {
    reverse(r - 2, r - 1, r);
    return solve(l, r - 3);
  }
  if ((r - l) & 1) {
    reverse(l, l + r - 1 >> 1, r - 1);
    reverse(l + 1, l + 1 + r >> 1, r);
  } else {
    reverse(l, l + r >> 1, r);
    reverse(l + 1, l + r >> 1, r - 1);
  }
  solve(l + 3, r - 3);
}
int main() {
  scanf("%d", &n);
  m = n / 3 + 12;
  for (int i = 1; i <= n; ++i) scanf("%d", a + i);
  solve(1, n);
  if (finish) {
    printf("YES\n%d\n", V.size());
    for (opts i : V) printf("%d %d %d\n", i.a, i.b, i.c);
  } else
    puts("NO");
  return 0;
}
