#include<stdio.h> #include<string.h> int Max(int a,int b) { return a>b?a:b; } int dp[3][1<<21]; int map[30][30]; int s[1<<21]; int main() { int i,j,k,n,num=0; for(i=0;i<(1<<21);i++) if(!(i&(i<<1))) s[num++]=i; while(scanf("%d",&n)!=EOF) { int limit=1<<n; for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&map[i][j]); memset(dp,0,sizeof(dp)); int p=0; for(i=0;i<n;i++) { p^=1; for(j=0;j<num;j++) { int sum=0; if(s[j]>limit) break; for(k=0;k<n;k++) if(s[j]&(1<<k)) sum+=map[i][k]; for(k=0;k<num;k++) { if(s[k]>limit) break; if(!(s[j]&s[k])) dp[p][s[j]]=Max(dp[p][s[j]],dp[1-p][s[k]]+sum); } } } int max=0; for(i=0;i<num&&s[i]<=limit;i++) max=Max(max,dp[p][s[i]]); printf("%d ",max); } return 0; }