//#include <bits/stdc++.h>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;
#define int long long
const int maxn=2e5+5;
int s[maxn];
bool used[maxn];
int aim;int num;
int n;
bool dfs(int stick,int len,int pos){
bool ok;
if(len==0)ok=true;
else ok=false;
if(stick==num)return true;
for(int i=pos+1;i<n;i++){
if(used[i])continue;
if(len+s[i]==aim){
used[i]=true;
if(dfs(stick+1,0,-1))return true;
used[i]=false;
return false;
}else if(len+s[i]<aim){
used[i]=true;
if(dfs(stick,len+s[i],i))return true;
used[i]=false;
if(ok)return false;
while(s[i]==s[i+1])i++;
}
}
return false;
}
signed main(){
std::ios::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
//freopen("bugged.in","r",stdin);
while(cin>>n){
if(n==0)break;
memset(s,0,sizeof s);
int ans=0;
for(int i=0;i<n;i++){
cin>>s[i];
ans+=s[i];
}
sort(s,s+n);
reverse(s,s+n);
for(aim=s[0];aim<=ans;aim++){
if(ans%aim==0){
memset(used,false,sizeof used);
num=ans/aim;
if(dfs(1,0,-1)){/*stick len pos*/
cout<<aim<<endl;
break;
}
}
}
}
return 0;
}