#include <bits/stdc++.h>   using namespace std;   vector<pair<int, int> > sol[1 << 9];   vector<pair<int, int> > gs(int t, int x) {     static int fm[1 << 19];     static pair<int, int> fs[1 << 19];     queue<int> q;     vector<pair<pair<int, int>, int> > sb;     for (int i = 0; i < (1 << t); ++i) fm[i] = -1;     for (int i = 0; i < t; ++i)       for (int k = 1; i + k + k < t; ++k)         sb.push_back(make_pair(pair<int, int>(i, k),                                (1 << i) ^ (1 << (i + k)) ^ (1 << (i + k + k))));     q.push(x);     fm[x] = -2;     while (!q.empty()) {       int w = q.front();       q.pop();       for (auto p : sb) {         if (fm[w ^ p.second] != -1) continue;         fm[w ^ p.second] = w;         fs[w ^ p.second] = p.first;         q.push(w ^ p.second);       }     }     if (fm[0] == -1) throw  GG ;     int tt = 0;     vector<pair<int, int> > vp;     while (tt != x) vp.push_back(fs[tt]), tt = fm[tt];     return vp;   }   int n;   int a[233333];   int main() {     int mx = 0;     for (int i = 0; i < (1 << 9); ++i) {       vector<pair<int, int> > sb;       for (int j = 0; j < 12; ++j)         for (int k = 1; j + k + k < 12; ++k) sb.push_back(pair<int, int>(j, k));       random_shuffle(sb.begin(), sb.end());       int u = sb.size();       for (int x = -1; x < u; ++x)         for (int y = x; y < u; ++y)           for (int z = y; z < u; ++z) {             vector<pair<int, int> > p;             if (x >= 0) p.push_back(sb[x]);             if (y >= 0) p.push_back(sb[y]);             if (z >= 0) p.push_back(sb[z]);             int w = i;             for (auto h : p) {               int a = h.first, b = h.second;               if (a >= 0 && a < 9) w ^= 1 << a;               if (a + b >= 0 && a + b < 9) w ^= 1 << (a + b);               if (a + b + b >= 0 && a + b + b < 9) w ^= 1 << (a + b + b);             }             if (!w) {               sol[i] = p;               goto GG;             }           }       cout <<  NMSL. n ;     GG:;     }     scanf( %d , &n);     for (int i = 1; i <= n; ++i) scanf( %d , a + i);     vector<pair<pair<int, int>, int> > vp;     int l = 1;     while (n - l + 1 >= 18) {       int h = 0;       for (int p = 0; p < 9; ++p)         if (a[l + p]) h ^= 1 << p;       vector<pair<int, int> > w = sol[h];       for (auto& t : w) {         t.first += l;         vp.push_back(make_pair(make_pair(t.first, t.first + t.second),                                t.first + t.second + t.second));         a[t.first] ^= 1;         a[t.first + t.second] ^= 1;         a[t.first + t.second + t.second] ^= 1;       }       l += 9;     }     try {       int g = 0;       for (int i = l; i <= n; ++i)         if (a[i]) g ^= 1 << (i - l);       vector<pair<int, int> > w = gs(n - l + 1, g);       for (auto& t : w) {         t.first += l;         vp.push_back(make_pair(make_pair(t.first, t.first + t.second),                                t.first + t.second + t.second));         a[t.first] ^= 1;         a[t.first + t.second] ^= 1;         a[t.first + t.second + t.second] ^= 1;       }     } catch (...) {       puts( NO );       return 0;     }     for (int i = 0; i <= n + 1; ++i)       if (a[i]) throw  GG ;     puts( YES );     printf( %d n , int(vp.size()));     for (auto t : vp)       printf( %d %d %d n , t.first.first, t.first.second, t.second);   }