#include<bits/stdc++.h>//想不出正解,只好模拟退火
using namespace std;
const int N=505;
int flag,n,m,d[N][N],np,dp,p[N],maxxxx;
int main()
{
//freopen("sanguo.in","r",stdin);
//freopen("sanguo,out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
scanf("%d",&d[i][j]);
d[j][i]=d[i][j];
}
}
int k=800;
while(k--)
{
int mac[N],peo[N],f[N];int cnt=0;
memset(f,0,sizeof(f));
label:
for(int i=1;i;i++)
{
int r=rand();
int l=r%n;if(f[l]) continue;
if(f[l]==0)
{
peo[++cnt]=l;
f[l]=1;
break;
}
}
int res=0;
int id;
for(int l=1;l<=cnt;l++)
for(int i=1;i<=n;i++)
{
if(d[peo[l]][i]>res&&f[i]==0&&i!=peo[l])
{
res=d[peo[l]][i];
id=i;
}
}
mac[cnt]=id;
f[id]=1;
if(cnt<n/2) goto label;
int maxx=0,maxxx=0;
for(int i=1;i<=n/2;i++)
for(int j=1;j<=n/2;j++)
{
maxx=max(d[mac[i]][mac[j]],maxx);
maxxx=max(d[peo[i]][peo[j]],maxxx);
}
if(maxxx>maxx) flag=1,maxxxx=max(maxxxx,maxxx);;
}
cout<<flag;
if(flag==1)
cout<<endl<<maxxxx;
return 0;
}
500数据超时不出所料 但是有没有大佬指点为什么18以下也会错一个点,有点不明白