#include<bits/stdc++.h>
using namespace std;
int id[65];
vector<int> vec;
int n,ans=-0x3f3f3f,len;
int gs,sum;
int cnt;
bool vis[65];
bool f;
struct cmp{
bool operator () (const int &a,const int &b){
return a>b;
}
};
void dfs(int,int,int);
int main()
{
cin>>n;
vec.push_back(0x3f3f3f);
for(int i=1;i<=n;i++){
int tmp;
cin>>tmp;
ans=max(ans,tmp);
sum+=tmp;
vec.push_back(tmp);
}
sort(vec.begin(),vec.end(),cmp());
cnt=vec.size()-1;
id[cnt]=cnt;
for(int i=cnt;i>=1;i--){
if(vec[i]==vec[i-1]){
id[i-1]=id[i];
}
else{
id[i-1]=i-1;
}
}
for(int i=ans;i<=sum/2;i++){
if(sum%i==0){
f=0;
len=i;
vis[1]=1;
gs=sum/i;
dfs(1,1,len-vec[1]);
vis[1]=0;
if(f){
cout<<i;
return 0;
}
}
}
cout<<sum;
return 0;
}
void dfs(int k,int last,int rest){
int i;
if(!rest){
if(k==gs) {f=1;return;}
for(i=1;i<=cnt;i++){
if(!vis[i]){
vis[i]=1;
break;
}
}
dfs(k+1,i,len-vec[i]);
vis[i]=0;
if(f){
return;
}
}
for(i=last+1;i<=cnt;i++){
if(vec[i]<=rest&&!vis[i]){
break;
}
}
for(;i<=cnt;i++){
if(!vis[i]){
vis[i]=1;
dfs(k,i,rest-vec[i]);
vis[i]=0;
if(f||rest==vec[i]){
return;
}
}
i=id[i];
}
}
第19和22点过不了 求助qwq