#include<bits/stdc++.h>
using namespace std;
const int MAXN=520;
int n,cnt,a[MAXN],l,max1=0,min1=INT_MAX;
inline int read()
{
int r=0,f=1;char c=getchar();
while((c<'0'||c>'9')&&(c!='-')) c=getchar();
if(c=='-') f=-1,c=getchar();
while(c>='0'&&c<='9') r=r*10+c-'0',c=getchar();
return r*f;
}
template<typename T> void print(T x){
if(!x) return;
print(x/10);
putchar((x%10)+'0');
}
inline void dfs(int x,int ps,int pre){
if(x==cnt+1){print(l);exit(0);}
if(ps==l){dfs(x+1,0,max1);return ;}
for(register int i=pre;i>=min1;i--){
if(!a[i]||i+ps>l)continue;
a[i]--;
dfs(x,ps+i,i);
a[i]++;
if(!ps||ps+i==l)break ;
}
return ;
}
int main() {
ios::sync_with_stdio(0),cin.tie(),cout.tie(0);
n=read();
int sum=0,t;
for(register int i=1;i<n+1;++i){
t=read();a[t]++;sum+=t;max1=max(max1,t);min1=min(min1,t);
}
for(l=min1;l<=sum;++l){
cnt=sum/l;
if(sum%l||cnt>n)continue;
dfs(1,0,max1);
}
return 0;
}