#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
const int MAXN = 1000;
int length[MAXN]; //木条长度
int vis[MAXN]; //木条是否使用
int n; //木条数量
int sum, len, num; //木条总长度,目标木条长度,目标木条数量
//深搜,搜索是否所有木条能拼成目标长度和数量的木条
//pos为当前搜索的木条的索引(木条长度从大到小排序后)
//nowLen为正在拼接的木条的当前长度
//nowNum为拼接到目标长度的木条的数量
bool DFS(int pos, int nowLen, int nowNum)
{
if (nowNum == num) //达到目标数量
return true;
for (int i = pos; i < n; i++)
{
if (vis[i])
continue;
if (nowLen + length[i] == len) //达到目标长度
{
vis[i] = 1;
if (DFS(0, 0, nowNum + 1)) //继续拼接下一根木条
return true;
vis[i] = 0;
return false;
}
else if (nowLen + length[i] < len) //小于目标长度
{
vis[i] = 1;
if (DFS(i + 1, nowLen + length[i], nowNum))
return true;
vis[i] = 0;
if (nowLen == 0)
return false;
while (length[i] == length[i + 1])
++i;
}
}
return false;
}
int main()
{
while (cin >> n)
{
if (n == 0)
break;
sum = 0;
for (int i = 0; i < n; i++)
{
vis[i] = 0;
cin >> length[i];
sum += length[i];
}
sort(length, length + n, greater<int>());
for (len = length[0]; len < sum; len++)
{
if (sum % len != 0)
continue;
num = sum / len;
if (DFS(0, 0, 0))
break;
}
cout << len << endl;
}
return 0;
}