#include<stdio.h> #include<string.h> #include<stdlib.h> int map[70],vis[70],sum,num,aim,n; int cmp(const void *a,const void *b) { return *(int *)b-*(int *)a; } int dfs(int cnt,int len,int pos) { int i; if(cnt==num) return 1; for(i=pos;i<n;i++) { if(vis[i]) continue; if(map[i]+len==aim) { vis[i]=1; if(dfs(cnt+1,0,0)) return 1; vis[i]=0; return 0; } else if(len+map[i]<aim) { vis[i]=1; if(dfs(cnt,len+map[i],i+1)) return 1; vis[i]=0; if(len==0) return 0; while(map[i]==map[i+1]) i++; } } return 0; } int main() { int i; while(scanf("%d",&n)&&n) { memset(vis,0,sizeof(vis)); sum=0; for(i=0;i<n;i++) { scanf("%d",&map[i]); sum+=map[i]; } qsort(map,n,sizeof(map[0]),cmp); for(aim=map[0];aim<=sum;aim++) { if(sum%aim!=0) continue; num=sum/aim; if(dfs(0,0,0)) { printf("%d\n",aim); break; } } } return 0; }