#include <bits/stdc++.h>
int n, s[100010];
struct Step {
  int a, b, c;
  inline Step() {}
  inline Step(int __a, int __b, int __c) { a = __a, b = __b, c = __c; }
};
std::vector<Step> Ans;
bool find_ans = false;
inline void reverse(int a, int b, int c) {
  s[a] ^= 1, s[b] ^= 1, s[c] ^= 1;
  Ans.push_back(Step(a, b, c));
}
inline void reverse(int a, int c) {
  int b = a + c >> 1;
  reverse(a, b, c);
}
std::vector<std::pair<int, int> > V;
int tmp[100010];
inline bool end(int l, int r) {
  for (int i = l; i <= r; i++)
    if (tmp[i]) return false;
  return true;
}
void calc(int l, int r) {
  for (int i = l; i <= r - 2; i++) {
    for (int j = i + 2; j <= r; j += 2) {
      V.push_back(std::make_pair(i, j));
    }
  }
  int sz = V.size(), U = 1 << sz;
  for (int i = 0; i < U; i++) {
    for (int i = l; i <= r; i++) tmp[i] = s[i];
    for (int j = 0; j < sz; j++)
      if (i & 1 << j)
        tmp[V[j].first] ^= 1, tmp[V[j].first + V[j].second >> 1] ^= 1,
            tmp[V[j].second] ^= 1;
    if (end(l, r)) {
      find_ans = true;
      for (int j = 0; j < sz; j++)
        if (i & 1 << j) reverse(V[j].first, V[j].second);
      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++;
    calc(l, r);
    return;
  }
  if (!s[l]) {
    solve(l + 1, r);
    return;
  }
  if (!s[r]) {
    solve(l, r - 1);
    return;
  }
  if ((s[l] == 1 && s[l + 1] == 1 && s[l + 2] == 1)) {
    reverse(l, l + 2), solve(l + 3, r);
    return;
  };
  if ((s[l] == 1 && s[l + 1] == 0 && s[l + 2] == 1)) {
    reverse(l, l + 4), solve(l + 3, r);
    return;
  };
  if ((s[l] == 1 && s[l + 1] == 0 && s[l + 2] == 0)) {
    reverse(l, l + 6), solve(l + 3, r);
    return;
  };
  if ((s[r] == 1 && s[r - 1] == 1 && s[r - 2] == 1)) {
    reverse(r - 2, r), solve(l, r - 3);
    return;
  };
  if ((s[r] == 1 && s[r - 1] == 0 && s[r - 2] == 1)) {
    reverse(r - 4, r), solve(l, r - 3);
    return;
  };
  if ((s[r] == 1 && s[r - 1] == 0 && s[r - 2] == 0)) {
    reverse(r - 6, r), solve(l, r - 3);
    return;
  };
  if (r - l & 1) {
    reverse(l, r - 1), reverse(l + 1, r);
    solve(l + 3, r - 3);
  } else {
    reverse(l, r), reverse(l + 1, r - 1);
    solve(l + 3, r - 3);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", s + i);
  solve(1, n);
  if (find_ans) {
    puts("YES");
    printf("%d\n", Ans.size());
    for (std::vector<Step>::iterator it = Ans.begin(); it != Ans.end(); it++) {
      printf("%d %d %d\n", it->a, it->b, it->c);
    }
  } else
    puts("NO");
  return 0;
}
