#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define ll long long
/*
9
5 2 1 5 2 1 5 2 1
4
1 2 3 4
38
2 6 6 8 7 4 1 8 4 1 4 4 3 3 2 3 3 4 6 8 8 7 2 4 1 1 5 8 4 7 6 5 1 3 3 3 1 6
*/
using namespace std;
int sz[101];
ll sum;
bool f;
int total_piece;
int stick_size;
bool visit[101];
int n;
bool cmp(int a,int b)
{
return a>b;
}
bool backtrack(int present_size,int index,int piece_count)//gainedlength,sticksize,piece count
{
if(piece_count*stick_size==sum)
return true;
for(int i=index;i<n;i++)
{
if(visit[i])
continue;
if(i>0 && !visit[i-1] && sz[i]==sz[i-1])
continue;
if(sz[i]+present_size<stick_size)
{
visit[i] = 1;
f = backtrack(sz[i]+present_size,i+1,piece_count);
if(f)
return 1;
visit[i] = 0;
if(present_size==0)
return 0;
}
else if(sz[i]+present_size == stick_size)
{
visit[i] = 1;
f = backtrack(0,0,piece_count+1);
if(f)
return 1;
visit[i] = 0;
return 0;
}
}
return 0;
}
int main()
{
int max_sz;
while(cin>>n)
{
if(n==0)
break;
sum = 0;
max_sz = 0;
for(int i=0;i<n;i++)
{
cin>>sz[i];
sum+=sz[i];
if(sz[i]>max_sz)
max_sz = sz[i];
}
sort(sz,sz+n,cmp);
bool found = false;
for(int stk= max_sz;stk<=sum;stk++)
{
if(sum%stk)
continue;
memset(visit,0,sizeof(visit));
total_piece = sum/stk;
stick_size = stk;
if(backtrack(0,0,0))
{
cout<<stk<<"\n";
found = 1;
break;
}
}
}
return 0;
}