#include<bits/stdc++.h>
using namespace std;
#define rep(i,n) for(lint i = 0; i < n; i++)
#define Rep(i,n) for(lint i = 1; i <= n; i++)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define debug(a) { cerr << #a << ':' << a << endl; }
#define endl '\n'
#define fi first
#define se second
using lint = long long;
using P = pair<int,int>;
template<class T> using V = vector<T>;
template<class T> using priq     = priority_queue<T>;
template<class T> using priq_inv = priority_queue<T, vector<T>, greater<T>>;
const int dx[] = {0,1,0,-1,1,1,-1,-1};
const int dy[] = {1,0,-1,0,1,-1,-1,1};
template<class T> T ceil(const T &a, const T &b) { return (a+b-1)/b; }
template<class T> bool chmin(T &a, T b) { if(a > b) { a = b; return 1; } return 0; }
template<class T> bool chmax(T &a, T b) { if(a < b) { a = b; return 1; } return 0; }
struct INF { template<class T> operator T() { return numeric_limits<T>::max() / 2; } } INF;

template<class T, class U> istream& operator>>(istream &in, pair<T,U> &p) {
    return in >> p.first >> p.second;
}
template<class T, class U> ostream& operator<<(ostream &out, const pair<T,U> &p) {
    return out << p.first << ' ' << p.second;
}
template<class T> istream& operator>>(istream &in, vector<T> &v) {
    for(auto &&e: v) in >> e;
    return in;
}
template<class T> ostream& operator<<(ostream &out, const vector<T> &v) {
    for(const auto &e: v) out << e << ' ';
    return out;
}

/*----------------------------------------------------------------------------------------------------*/

const lint mod = 1e9+7;

int main() {
    int n;
    cin >> n;
    V<lint> a(n);
    cin >> a;
    // dp[i][j] := Aiでj回目に切る
    V<V<lint>> dp(n+1,V<lint>(n+1));
    dp[0][0] = 1;
    // dat[mod][tot] := sum[k][mod] == tot を満たす各kについてのdp[k][mod-1]の総和
    V<V<lint>> dat(n+3,V<lint>(n+3));
    // sum[i][j] := ΣA[0,i] % j
    V<V<lint>> sum(n+2,V<lint>(n+2));
    dat[1][0] = 1;
    Rep(i,n)Rep(j,n) {
        sum[i][j] = (sum[i-1][j] + a[i-1]) % j;
    }
    Rep(i,n)for(lint j = n; j >= 0; j--) {
        dp[i][j] = dat[j][sum[i][j]] % mod;
        dat[j+1][sum[i][j+1]] += dp[i][j];
        dat[j+1][sum[i][j+1]] = dat[j+1][sum[i][j+1]] % mod;
    }
    lint ans = 0;
    rep(j,n+1) ans += dp[n][j], ans %= mod;
    cout << ans << endl;
}
#include<bits/stdc++.h>
using namespace std;
int numofbits5(long bits)
{
    bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
    bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
    bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
    bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
    return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff);
}
int main(void){
  int n; cin>>n;
  n=min(8,n);
  vector<int> a(n);
  for(int i=0; i<n; ++i) cin>>a[i];
  for(int i=1; i<(1<<n); ++i){
    long long sum=0;
    for(int j=0; j<n; ++j){ if(i&(1<<j)) sum+=a[j];}
    sum%=200;
    for(int j=1; j<(1<<n); ++j){
      long long sum2=0;
      for(int k=0; k<n; ++k){ if(j&(1<<k)) sum2+=a[k];}
      sum2%=200;
      if(sum==sum2 && i!=j){
        cout<<"Yes"<<endl;
        printf("%d ",numofbits5(i));
        for(int k=0; k<n; ++k){ if(i&(1<<k)) printf("%d ",k+1);}
        cout<<endl;
        printf("%d ",numofbits5(j));
        for(int k=0; k<n; ++k){ if(j&(1<<k)) printf("%d ",k+1);}
        cout<<endl;
        return 0;
      }
    }
  }
  cout<<"No"<<endl;
  return 0;
}