#include <bits/stdc++.h>

#define For(i, a, b) for (int i = (int)(a); i < (int)(b); ++i)
#define rFor(i, a, b) for (int i = (int)(a)-1; i >= (int)(b); --i)
#define rep(i, n) For((i), 0, (n))
#define rrep(i, n) rFor((i), (n), 0)
#define fi first
#define se second

using namespace std;

typedef long long lint;
typedef unsigned long long ulint;
typedef pair<int, int> pii;
typedef pair<lint, lint> pll;

template <class T>
bool chmax(T &a, const T &b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}
template <class T>
bool chmin(T &a, const T &b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}

template <class T>
T div_floor(T a, T b) {
    if (b < 0) a *= -1, b *= -1;
    return a >= 0 ? a / b : (a + 1) / b - 1;
}
template <class T>
T div_ceil(T a, T b) {
    if (b < 0) a *= -1, b *= -1;
    return a > 0 ? (a - 1) / b + 1 : a / b;
}

template <typename T>
struct coord_comp {
    vector<T> v;
    bool sorted = false;

    coord_comp() {}

    int size() { return v.size(); }

    void add(T x) { v.push_back(x); }

    void build() {
        sort(v.begin(), v.end());
        v.erase(unique(v.begin(), v.end()), v.end());
        sorted = true;
    }

    int get_idx(T x) {
        assert(sorted);
        return lower_bound(v.begin(), v.end(), x) - v.begin();
    }

    T &operator[](int i) { return v[i]; }
};

constexpr lint mod = 1000000007;
constexpr lint INF = mod * mod;
constexpr int MAX = 200010;

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

    bool dp[n + 1][200][2][2];
    rep(i, n + 1) rep(j, 200) rep(k, 2) rep(l, 2) dp[i][j][k][l] = false;
    dp[0][0][0][0] = true;
    tuple<int, int, int> prv[n + 1][200][2][2];
    rep(i, n) rep(j, 200) rep(k, 2) rep(l, 2) if (dp[i][j][k][l]) {
        dp[i + 1][(j + a[i]) % 200][1][l] = true;
        prv[i + 1][(j + a[i]) % 200][1][l] = {0, k, l};

        dp[i + 1][(j - a[i] + 200) % 200][k][1] = true;
        prv[i + 1][(j - a[i] + 200) % 200][k][1] = {1, k, l};

        dp[i + 1][j][k][l] = true;
        prv[i + 1][j][k][l] = {2, k, l};
    }

    if (dp[n][0][1][1]) {
        puts("Yes");
        int j = 0, k = 1, l = 1;
        vector<int> b, c;
        rFor(i, n + 1, 1) {
            auto [t, nk, nl] = prv[i][j][k][l];
            if (t == 0) {
                b.push_back(i - 1);
                j = (j + 200 - a[i - 1]) % 200;
            } else if (t == 1) {
                c.push_back(i - 1);
                j = (j + a[i - 1]) % 200;
            }
            k = nk;
            l = nl;
        }

        reverse(b.begin(), b.end());
        reverse(c.begin(), c.end());
        printf("%d ", b.size());
        for (auto x : b) printf("%d ", x + 1);
        printf("\n");
        printf("%d ", c.size());
        for (auto x : c) printf("%d ", x + 1);
        printf("\n");
        return 0;
    }
    puts("No");
}
#include <bits/stdc++.h>


using namespace std;


int main() {
    int N;
    cin >> N;
    N = min(8, N);
    vector<int> A(N);
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
        A[i] %= 200;
    }

    vector<vector<int>> rs(200);
    for (int i = 1; i < (1 << N); ++i) {
        int acc = 0;
        for (int j = 0; j < N; ++j) {
            if ((i >> j) & 1) {
                acc += A[j];
                acc %= 200;
            }
        }
        rs[acc].push_back(i);
    }

    int m = -1;
    for (int i = 0; i < 200; ++i) {
        if (rs[i].size() > 1) {
            m = i;
            break;
        }
    }

    if (m < 0) {
        cout << "No" << endl;
        return 0;
    }

    int b = rs[m][0];
    vector<int> B;
    for (int i = 0; i < N; ++i) {
        if ((b >> i) & 1) {
            B.push_back(i);
        }
    }

    int c = rs[m][1];
    vector<int> C;
    for (int i = 0; i < N; ++i) {
        if ((c >> i) & 1) {
            C.push_back(i);
        }
    }

    cout << "Yes" << endl;
    cout << B.size() << " ";
    for (int e : B) {
        cout << e + 1<< " ";
    }
    cout << endl;
    cout << C.size() << " ";
    for (int e : C) {
        cout << e + 1 << " ";
    }
    cout << endl;
}
