#include <iostream>
#include <queue>
using namespace std;
long long a[100];
priority_queue<long long >que;
int main() {
long long n;
scanf("%lld",&n);
for(int i=0;i<n;i++)
{
scanf("%lld",&a[i]);
que.push(a[i]);
}
long long num=0;
while(!que.empty())
{
long long x=que.top();
if(x+num>=n)
{
que.pop();
long long k=(x+num)/n;
// printf("%lld\n",k);
long long m=(x+num)%n;
// printf("%lld\n",m);
num+=k;
// printf("%lld\n",num);
que.push(m-num);
}
else{
break;
}
}
printf("%lld\n",num);
return 0;
}
#include <iostream>
#include<vector>
#include<queue>
#include<string.h>
#include<algorithm>
using namespace std;
int a[100005];
vector<int>edge[100005];
int d[100005];
int dp[100005];
queue<int>que;
int main() {
int res=0;
int n;
memset(dp,0,sizeof(dp));
memset(d,0,sizeof(d));
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<n;i++)
{
int x=0,y=0;
scanf("%d%d",&x,&y);
if(a[x]<a[y])
{
edge[x].push_back(y);
d[y]++;
}
else if(a[y]<a[x])
{
edge[y].push_back(x);
d[x]++;
}
}
for(int i=1;i<=n;i++)
{
if(!d[i])
{
que.push(i);
}
}
while(!que.empty())
{
int x=que.front();
que.pop();
for(int i=0;i<edge[x].size();i++)
{
int y=edge[x][i];
dp[y]=max(dp[y],dp[x]+1);
res=max(res,dp[y]);
d[y]--;
if(!d[y])
{
que.push(y);
}
}
}
printf("%d\n",res+1);
return 0;
}
// 64 位输出请用 printf("%lld")