#include <bits/stdc++.h>
#define rep(i,cc,n) for(int i=cc;i<=n;++i)
using namespace std;

vector<int> v(200, -1);

void print_answer(int x)
{
  int cnt = 0;
  vector<int> t;
  for (int i = 0; i < 20; ++i)
  {
    if (x & (1 << i))
    {
      t.push_back(i + 1);
      cnt++;
    }
  }
  cout << cnt << " ";
  for (int d : t) cout << d << " ";
  cout << endl;
}

int main()
{
  int n;
  cin >> n;
  vector<int> a(n);
  rep(i,0,n-1) cin >> a[i];
  rep(i,0,n-1) a[i] %= 200;
  int m = min(n, 20);
  int x = -1, y = -1;
  for (int i = 1; i < (1 << m); ++i)
  {
    int p = 0;
    for (int j = 0; j < m; ++j)
    {
      if (i & (1 << j))
      {
        p = (p + a[j]) % 200;
      }
    }
    if (v[p] == -1)
      v[p] = i;
    else
    {
      x = v[p], y = i;
      break;
    }
  }

  if (x == -1)
    cout << "No" << endl;
  else
  {
    cout << "Yes" << endl;
    print_answer(x);
    print_answer(y);
  }

  return 0;
}

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i,l,r) for(int i=(l);i<(r);++i)
#define per(i,l,r) for(int i=(r)-1;i>=(l);--i)
#define dd(x) cerr<<#x<<"="<<x<<","
#define de(x) cerr<<#x<<"="<<x<<endl
//-------

const int N = 201;
int n, a[N], dp[N][N][4];
pair<int, int> go[N][N][4];

pair<vector<int>, vector<int>> gao() {
	vector<int> B, C;
	per(K, 1, 4) if (dp[n][0][K]) {
		for (int i = n, j = 0, k = K; i > 0; --i) {
			int pk, op; tie(pk, op) = go[i][j][k];
			if (-1 == op) {
				C.emplace_back(i);	
				j = (j + a[i]) % 200;
			} else if (1 == op) {
				B.emplace_back(i);
				j = ((j - a[i]) % 200 + 200) % 200;
			}
			k = pk;
		}
		if (K == 3) return {B, C};
		if (B.size() == n || C.size() == n) {
			B.clear(), C.clear();
			return {B, C};
		}
		if (B.empty() || C.empty()) {
			vector<bool> used(n + 1, false);
			for (auto p : B) used[p] = true;
			for (auto p : C) used[p] = true;
			rep(p, 1, n + 1) if (!used[p]) {
				B.emplace_back(p);
				C.emplace_back(p);
				break;
			}
		}
		return {B, C};
	}
	return {B, C};
}

int main() {
	scanf("%d", &n);
	rep(i, 1, n + 1) {
		scanf("%d", a + i);
		a[i] %= 200;
	}

	rep(i, 0, n + 1) rep(j, 0, 200) rep(k, 0, 4)
		dp[i][j][k] = false;

	dp[0][0][0] = true;

	rep(i, 0, n) {
		rep(j, 0, 200) rep(k, 0, 4) if (dp[i][j][k]) {
			dp[i + 1][j][k] = true;
			go[i + 1][j][k] = {k, 0};
		}
		rep(j, 0, 200) rep(k, 0, 4) {
			if (0 == dp[i][j][k])
				continue;
			int ni = i + 1, nj, nk;
			// add Ai
			nj = (j + a[ni]) % 200, nk = k | 2;
			if (0 == dp[ni][nj][nk]) {
				dp[ni][nj][nk] = true;
				go[ni][nj][nk] = {k, 1};
			}
			// minus Ai
			nj = ((j - a[ni]) % 200 + 200) % 200, nk = k | 1;
			if (0 == dp[ni][nj][nk]) {
				dp[ni][nj][nk] = true;
				go[ni][nj][nk] = {k, -1};
			}
		}
	}
	vector<int> B, C;
	tie(B, C) = gao();
	if (B.empty() || C.empty()) {
		puts("No");
	} else {
		sort(B.begin(), B.end());
		sort(C.begin(), C.end());

		puts("Yes");
		printf("%d", B.size());
		for (auto b : B) printf(" %d", b);
		puts("");
		printf("%d", C.size());
		for (auto c : C) printf(" %d", c);
		puts("");
	
	}

	return 0;
}

