#define _USE_MATH_DEFINES #include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define MT make_tuple #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)<; using vi = vector; using vll = vector; const int D[] = { 0,-1,0,1,0 }; const int N = 5; int C[N][N], share[N][N], vis[N][N]; ll sm[2]; void dfs(int r, int c) { if (vis[r][c]++)return; int s = share[r][c]; sm[s] += C[r][c]; rep(i, 4) { int nr = r + D[i], nc = c + D[i + 1]; if (nr >= 0 && nc >= 0 && nr < N && nc < N && s==share[nc][nr] && !vis[nr][nc]) { dfs(nr, nc); } } } void solve() { rep(i, N)rep(j, N)cin >> C[i][j]; const int M = 16; vector P; rep(i, 4)P.emplace_back(0, i); rep(i, 4)P.emplace_back(i, 4); rep(i, 4)P.emplace_back(4, 4 - i); rep(i, 4)P.emplace_back(4 - i, 0); ll ans = LLONG_MAX; rep(i, M)for (int j = i + 1; j <= M; ++j) { rep(S, 1 << 9) { MEM(share, 0); MEM(vis, 0); MEM(sm, 0); for (int k = i; k < j; ++k) { share[P[k].first][P[k].second] = 1; } rep(k, 9) if (S >> k & 1) { int r = k / 3 + 1, c = k % 3 + 1; share[r][c] = 1; } int cnt = 0; [&] { rep(r, N)rep(c, N)if (!vis[r][c]) { if (cnt++ == 2) { return; } dfs(r, c); } }(); if (cnt <= 2) { smin(ans, abs(sm[0] - sm[1])); } } } cout << ans << endl; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(15); solve(); return 0; }