#include <bits/stdc++.h>
using std::lower_bound;
using std::max;
using std::min;
using std::random_shuffle;
using std::reverse;
using std::set;
using std::sort;
using std::swap;
using std::unique;
using std::upper_bound;
using std::vector;
void open(const char *s) {}
void open2(const char *s) {}
int rd() {
  int s = 0, c, b = 0;
  while (((c = getchar()) < '0' || c > '9') && c != '-')
    ;
  if (c == '-') {
    c = getchar();
    b = 1;
  }
  do {
    s = s * 10 + c - '0';
  } while ((c = getchar()) >= '0' && c <= '9');
  return b ? -s : s;
}
void put(int x) {
  if (!x) {
    putchar('0');
    return;
  }
  static int c[20];
  int t = 0;
  while (x) {
    c[++t] = x % 10;
    x /= 10;
  }
  while (t) putchar(c[t--] + '0');
}
int upmin(int &a, int b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int upmax(int &a, int b) {
  if (b > a) {
    a = b;
    return 1;
  }
  return 0;
}
const int N = 100010;
int n;
int a[N];
int b[N];
set<int> s;
int t = 0;
int ans1[N], ans2[N], ans3[N];
void gao(int x, int y, int z) {
  t++;
  ans1[t] = x;
  ans2[t] = y;
  ans3[t] = z;
  a[x] ^= 1;
  a[y] ^= 1;
  a[z] ^= 1;
  if (a[x])
    s.insert(x);
  else
    s.erase(x);
  if (a[y])
    s.insert(y);
  else
    s.erase(y);
  if (a[z])
    s.insert(z);
  else
    s.erase(z);
}
int check() {
  memcpy(b, a, sizeof b);
  for (int i = n; i >= 3; i--) {
    if (b[i]) {
      b[i] ^= 1;
      b[i - 1] ^= 1;
      b[i - 2] ^= 1;
    }
  }
  if (!b[1] && !b[2]) return 1;
  if (b[1] && !b[2] && n >= 7) {
    return 1;
  }
  if (b[2] && !b[1] && n >= 7) {
    return 1;
  }
  if (b[1] && b[2] && n >= 9) {
    return 1;
  }
  return 0;
}
vector<int> s0, s1, s2;
int main() {
  open("c");
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= n; i++)
    if (a[i]) s.insert(i);
  for (int i = 1; i <= n - 2; i++)
    if (a[i]) {
      for (auto v : s)
        if (v > i) {
          if (v + v - i > n) break;
          if (a[v + v - i]) {
            gao(i, v, v + v - i);
            break;
          }
        }
    }
  for (int i = 1; i <= n; i++)
    if (a[i]) {
      if (i % 3 == 0)
        s0.push_back(i);
      else if (i % 3 == 1)
        s1.push_back(i);
      else
        s2.push_back(i);
    }
  while (s0.size() >= 2) {
    int y = s0.back();
    s0.pop_back();
    int x = s0.back();
    s0.pop_back();
    gao(x, (x + x + y) / 3, (x + y + y) / 3);
    gao((x + x + y) / 3, (x + y + y) / 3, y);
  }
  while (s1.size() >= 2) {
    int y = s1.back();
    s1.pop_back();
    int x = s1.back();
    s1.pop_back();
    gao(x, (x + x + y) / 3, (x + y + y) / 3);
    gao((x + x + y) / 3, (x + y + y) / 3, y);
  }
  while (s2.size() >= 2) {
    int y = s2.back();
    s2.pop_back();
    int x = s2.back();
    s2.pop_back();
    gao(x, (x + x + y) / 3, (x + y + y) / 3);
    gao((x + x + y) / 3, (x + y + y) / 3, y);
  }
  if (s0.size()) {
    int x = s0.front();
    if (x >= 7) {
      gao(x - 6, x - 3, x);
      gao(x - 6, x - 5, x - 4);
      gao(x - 5, x - 4, x - 3);
    } else if (x <= n - 6) {
      gao(x, x + 3, x + 6);
      gao(x + 3, x + 4, x + 5);
      gao(x + 4, x + 5, x + 6);
    } else if (x >= 4 && x <= n - 3) {
      gao(x - 3, x, x + 3);
      gao(x - 3, x - 1, x + 1);
      gao(x - 1, x + 1, x + 3);
    } else {
      printf("NO\n");
      return 0;
    }
  }
  if (s1.size()) {
    int x = s1.front();
    if (x >= 7) {
      gao(x - 6, x - 3, x);
      gao(x - 6, x - 5, x - 4);
      gao(x - 5, x - 4, x - 3);
    } else if (x <= n - 6) {
      gao(x, x + 3, x + 6);
      gao(x + 3, x + 4, x + 5);
      gao(x + 4, x + 5, x + 6);
    } else if (x >= 4 && x <= n - 3) {
      gao(x - 3, x, x + 3);
      gao(x - 3, x - 1, x + 1);
      gao(x - 1, x + 1, x + 3);
    } else {
      printf("NO\n");
      return 0;
    }
  }
  if (s2.size()) {
    int x = s2.front();
    if (x >= 7) {
      gao(x - 6, x - 3, x);
      gao(x - 6, x - 5, x - 4);
      gao(x - 5, x - 4, x - 3);
    } else if (x <= n - 6) {
      gao(x, x + 3, x + 6);
      gao(x + 3, x + 4, x + 5);
      gao(x + 4, x + 5, x + 6);
    } else if (x >= 4 && x <= n - 3) {
      gao(x - 3, x, x + 3);
      gao(x - 3, x - 1, x + 1);
      gao(x - 1, x + 1, x + 3);
    } else {
      printf("NO\n");
      return 0;
    }
  }
  printf("YES\n");
  printf("%d\n", t);
  for (int i = 1; i <= t; i++) printf("%d %d %d\n", ans1[i], ans2[i], ans3[i]);
  return 0;
}
