#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
const int N = 20010;
ll n, m, k;
int a[N];
vector<int> path;
vector<int> res1, res2;
vector<int> keep[N];
bool success=0;
void dfs(int u,int sum)
{
    sum %= 200;
    if(success) return ;
    if(u == n + 1)
    {
        if(keep[sum].size() && path.size())
        {
            success = 1;
            res1 = keep[sum];
            res2 = path;
        }
        else keep[sum] = path;
        return ;
    }
    
    dfs(u+1,sum);//不选这个数
    
    //选这个数
    path.push_back(u);
    dfs(u+1,sum + a[u]);
    path.pop_back();
}
 
int main()
{
    cin >> n;
    
    for(int i=1;i<=n;i++) scanf("%d",a+i);
    
    dfs(1,0);
    
    if(success)
    {
        puts("YES");
      	cout << res1.size() << " ";
        for(auto it : res1) cout << it << " ";
        cout << endl;
      cout << res2.size() << " ";
        for(auto it : res2) cout << it << " ";
    }
    else puts("NO");
     
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
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 (b<a) { a=b; return true; } return false; }
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define mp make_pair
#define si(x) int(x.size())
const int mod=1000000007,MAX=205,INF=1<<30;

#define int short

struct dat{
    int i;
    int j;
    int k;
    int t;
    int tt;
    int ttt;
};

dat can[MAX][MAX][MAX][2][2][2];

signed main(){
    
    std::ifstream in("text.txt");
    std::cin.rdbuf(in.rdbuf());
    cin.tie(0);
    ios::sync_with_stdio(false);
    
    int N;cin>>N;
    vector<int> A(N);
    for(int i=0;i<N;i++){
        ll x;cin>>x;
        x%=200;
        A[i]=x;
    }
    
    for(int i=0;i<=N;i++) for(int j=0;j<200;j++) for(int k=0;k<200;k++) for(int t=0;t<2;t++) for(int tt=0;tt<2;tt++) for(int ttt=0;ttt<2;ttt++) can[i][j][k][t][tt][ttt]={-1,-1,-1,-1,-1,-1};
    can[0][0][0][0][0][0]={0,0,0,0,0,0};
    
    for(int i=0;i<N;i++){
        for(int j=0;j<200;j++){
            for(int k=0;k<200;k++){
                for(int t=0;t<2;t++){
                    for(int tt=0;tt<2;tt++){
                        for(int ttt=0;ttt<2;ttt++){
                            if(can[i][j][k][t][tt][ttt].i==-1) continue;
                            
                            can[i+1][j][k][t][tt][ttt]={i,j,k,t,tt,ttt};
                            can[i+1][(j+A[i])%200][k][1][tt][1]={i,j,k,t,tt,ttt};
                            can[i+1][j][(k+A[i])%200][t][1][1]={i,j,k,t,tt,ttt};
                            can[i+1][(j+A[i])%200][(k+A[i])%200][1][1][ttt]={i,j,k,t,tt,ttt};
                        }
                    }
                }
            }
        }
    }
    
    for(int jj=0;jj<200;jj++){
        if(can[N][jj][jj][1][1][1].i==N-1){
            vector<int> X,Y;
            int nowj=jj,nowk=jj,nowt=1,nowtt=1,nowttt=1;
            for(int i=N;i>=1;i--){
                auto par=can[i][nowj][nowk][nowt][nowtt][nowttt];
                if(par.j!=nowj||nowt!=par.t) X.push_back(i-1);
                if(par.k!=nowk||nowtt!=par.tt) Y.push_back(i-1);
                
                nowj=par.j;
                nowk=par.k;
                nowt=par.t;
                nowtt=par.tt;
                nowttt=par.ttt;
            }
            
            sort(all(X));
            sort(all(Y));
            
            cout<<"Yes"<<endl;
            cout<<si(X)<<" ";
            for(int a:X) cout<<a+1<<" ";
            cout<<endl;
            
            cout<<si(Y)<<" ";
            for(int a:Y) cout<<a+1<<" ";
            cout<<endl;
            
            return 0;
        }
    }
    
    cout<<"No"<<endl;
}
