#include<iostream>
#include<algorithm>
using namespace std;
int n,sum,cnt;//cnt=sum/i
struct node
{
int len;
int vis;
}stick[70];
int cmp(node a,node b)
{
return a.len>b.len;
}
int dfs(int len,int count,int l,int pos)
{
if(len==sum) return 1;
if(count==cnt) return 1;
for(int i=pos;i<n;i++)
{
if(stick[i].vis) continue;
if(len==(stick[i].len+l))
{
stick[i].vis=1;
if(dfs(len,count+1,0,0)) return 1;
stick[i].vis=0;
return 0;
}
else if(len>(stick[i].len+l))
{
stick[i].vis=1;
// l+=stick[i].len;
if(dfs(len,count,l+stick[i].len,i+1)) return 1;
// l-=stick[i].len;
stick[i].vis=0;
if(l==0) return 0;
while(stick[i].len==stick[i+1].len) i++;
}
}
return 0;
}
int main()
{
while(cin>>n)
{
if(n==0) break;
sum=cnt=0;
for(int i=0;i<n;i++)
{
cin>>stick[i].len;
stick[i].vis=0;
sum+=stick[i].len;
}
sort(stick,stick+n,cmp);
for(int i=stick[0].len;i<=sum;i++)
{
if(sum%i!=0) continue;
cnt=sum/i;
if(dfs(i,0,0,0))
{
cout<<i<<endl;
break;
}
}
}
return 0;
}