#include <bits/stdc++.h>
const int MAXN = 1e5 + 10;
int n;
int a[MAXN];
int prev[MAXN];
std::tuple<int, int, int> opt[MAXN];
void init_bfs() {
  std::queue<int> q;
  q.push(0);
  prev[0] = -1;
  static bool visit[MAXN];
  visit[0] = 1;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i < 6; i++) {
      for (int j = i + 1; j <= 6; j++) {
        int k = 2 * j - i;
        if (k >= 11) continue;
        int v = u ^ (1 << i);
        if (j < 6) v ^= (1 << j);
        if (k < 6) v ^= (1 << k);
        if (!visit[v]) {
          visit[v] = 1;
          prev[v] = u;
          opt[v] = {i, j, k};
          q.push(v);
        }
      }
    }
  }
}
std::vector<std::tuple<int, int, int> > get(int x) {
  std::vector<std::tuple<int, int, int> > ans;
  while (x) {
    ans.push_back(opt[x]);
    x = prev[x];
  }
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", a + i);
  }
  std::vector<std::tuple<int, int, int> > res;
  int k = n;
  init_bfs();
  while (k >= 15) {
    if (a[k] == 0) {
      k--;
      continue;
    }
    int val = 0;
    for (int i = 0; i < 6; i++) val |= a[k - i] << i;
    auto v = get(val);
    for (auto i : v) {
      int x, y, z;
      std::tie(x, y, z) = i;
      a[k - x] ^= 1;
      a[k - y] ^= 1;
      a[k - z] ^= 1;
      res.emplace_back(k - x, k - y, k - z);
    }
    k -= 6;
  }
  if (n >= 15) k = 14;
  static int prev[MAXN];
  static bool visit[MAXN];
  static std::tuple<int, int, int> opt[MAXN];
  std::queue<int> q;
  int val = 0;
  for (int i = 0; i < k; i++) val |= a[k - i] << i;
  visit[val] = 1;
  q.push(val);
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    for (int i = 0; i < k; i++) {
      for (int j = i + 1; j < k; j++) {
        int c = 2 * j - i;
        if (c >= k) continue;
        int v = u ^ (1 << i) ^ (1 << j) ^ (1 << c);
        if (!visit[v]) {
          visit[v] = 1;
          opt[v] = {i, j, c};
          prev[v] = u;
          q.push(v);
        }
      }
    }
  }
  if (!visit[0]) {
    puts("NO");
    return 0;
  }
  for (int x = 0; x != val; x = prev[x]) {
    int a, b, c;
    std::tie(a, b, c) = opt[x];
    res.emplace_back(k - a, k - b, k - c);
  }
  puts("YES");
  printf("%lu\n", res.size());
  for (auto i : res) {
    int x, y, z;
    std::tie(x, y, z) = i;
    printf("%d %d %d\n", z, y, x);
  }
}
