#pragma GCC optimize("O3")
#pragma GCC optimize ("unroll-loops")
#pragma GCC target ("avx2")
#define io_init cin.tie(0);ios::sync_with_stdio(0);cout<<fixed<<setprecision(20)
#include <bits/stdc++.h>
constexpr int INF = 2147483647;
constexpr long long int INF_LL = 9223372036854775807;
constexpr int MOD = 1000000007;
constexpr double PI = 3.14159265358979323846;
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;

template<typename T> class BIT {
private:
    int n;
    vector<T> bit;
public:
    // 0_indexed で i 番目の要素に x を加える
    void add(int i, T x) {
        i++;
        while (i < n) {
            bit[i] += x, i += i & -i;
        }
    }
    // 0_indexed で [0,i] の要素の和(両閉区間！！)
    T sum(int i) {
        i++;
        T s = 0;
        while (i > 0) {
            s += bit[i], i -= i & -i;
        }
        return s;
    }
    BIT() {}
    //初期値がすべて0の場合
    BIT(int sz) : n(sz + 1), bit(n, 0) {}
    BIT(const vector<T>& v) : n((int)v.size() + 1), bit(n, 0) {
        for (int i = 0; i < n - 1; i++) {
            add(i, v[i]);
        }
    }
    void print() {
        for (int i = 0; i < n - 1; i++) {
            cout << sum(i) - sum(i - 1) << " ";
        }
        cout << "\n";
    }
    //-1スタート
    void print_sum() {
        for (int i = 0; i < n; i++) {
            cout << sum(i - 1) << " ";
        }
        cout << "\n";
    }
};

// u を昇順にソートするのに必要な交換回数(転倒数) (u は {0,..., n-1} からなる重複を許した長さ n の数列)
long long inv_count(const vector<int>& u)
{
    int n = (int)u.size();
    BIT<int> bt(n);
    long long ans = 0;
    for (int i = 0; i < n; i++) {
        ans += i - bt.sum(u[i]);
        bt.add(u[i], 1);
    }
    return ans;
}

// u を v に変換するのに必要な交換回数(転倒数)
// (u, v は {0,..., n-1} からなる重複を許した長さ n の数列. ただし u, v 全体で各数字の個数は一致するものとする)
long long inv_count(const vector<int>& u, const vector<int>& v)
{
    int n = (int)u.size();
    vector<vector<int> > p(n);
    BIT<int> bt(n);
    for (int i = n - 1; i >= 0; --i) {
        p[u[i]].push_back(i);
    }
    long long ans = 0;
    for (int i = 0; i < n; ++i) {
        int pos = p[v[i]].back();
        p[v[i]].pop_back();
        ans += pos - bt.sum(pos);
        bt.add(pos, 1);
    }
    return ans;
}

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


    ll tento = inv_count(A, B);

	for (int i = 0; i < N; i++) {
        cout << tento << endl;
        int low = A[i], high = N - A[i] - 1;
        tento += high - low;
        
	}
}
#include <bits/stdc++.h>

using namespace std;

void solve() {
    int n;
    cin >> n;
    vector<int> v(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i];
        v[i] %= 200;
    }
    map<int, vector<set<int> >> dupa;
    for (int i = 0; i < n; i++) {
        int x = v[i];
        set<int> setik;
        map<int, vector<set<int> > > nd;
        setik.insert(i);
        nd[x].push_back(setik);
        if (nd[x].size() > 1) {
            return;
        }
        for (auto p : dupa) {
            for (set<int> s : p.second) {
                int nx = (p.first + x) % 200;
                s.insert(i);
                nd[nx].push_back(s);
            }
        }
        for (auto p : nd) {
            for (set<int> & s : p.second) {
                dupa[p.first].push_back(s);
            }
            if (dupa[p.first].size() > 1) {
                cout << "yes\n";
                cout << dupa[p.first][0].size();
                for (int z : dupa[p.first][0]) {
                    cout << " " << z+1;
                }
                cout << endl;
                cout << dupa[p.first][1].size();
                for (int z : dupa[p.first][1]) {
                    cout << " " << z+1;
                }
                cout << endl;
                return;
            }
        }
    }
    cout << "no\n";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout << fixed;
    cout.precision(12);

    int T = 1;
    //cin >> T;
    for (int t = 0; t < T; t++) {
        solve();
    }

    return 0;
}

