#include using namespace std; #define ll long long #define int long long #define pii pair #define piii pair #define pll pair #define plll pair #define fi first #define se second const int N = 2e5 + 5, M = 1e6 + 5; const int inf = 1e9, mod = 998244353; const ll INF = 1e18; const int dx[] = {0, 1, 0, -1}; const int dy[] = {1, 0, -1, 0}; namespace ARIS0_0{ int a[10][10], id[10][10], p[105], lstp[105]; int find(int x){ if (p[x] != x) p[x] = find(p[x]); return p[x]; } void merge(int u, int v){ int pu = find(u), pv = find(v); if (pu == pv) return ; p[pu] = pv; } void init(){ } void solve(){ int n = 5, all = 0; for (int i = 1; i <= 5; i ++ ) for (int j = 1; j <= 5; j ++ ) cin >> a[i][j], all += a[i][j]; for (int i = 1, t = 1; i <= 5; i ++ ) for (int j = 1; j <= 5; j ++, t ++ ) id[i][j] = t; int ans = INF; for (int I = 0; I < 16; I ++ ) for (int J = I; J < 16; J ++ ){ for (int i = 1; i <= id[n][n]; i ++ ) p[i] = i; int sx, sy, ex, ey; { int a = I / 4, b = I % 4; if (a == 0) sx = 1, sy = b + 1; else if (a == 1) sx = b + 1, sy = n; else if (a == 2) sx = n, sy = n - b; else if (a == 3) sx = n - b, sy = 1; } { int a = J / 4, b = J % 4; if (a == 0) ex = 1, ey = b + 1; else if (a == 1) ex = b + 1, ey = n; else if (a == 2) ex = n, ey = n - b; else if (a == 3) ex = n - b, ey = 1; } int sa = 0; vector > vis(6, vector (6)); if (I / 4 == J / 4){ int aa = I / 4; if (aa == 0){ for (int j = sy; j <= ey; j ++ ) sa += a[1][j], vis[1][j] = 1; } else if (aa == 1){ for (int j = sx; j <= ex; j ++ ) sa += a[j][n], vis[j][n] = 1; } else if (aa == 2){ for (int j = sy; j >= ey; j -- ) sa += a[n][j], vis[n][j] = 1; } else{ for (int j = sx; j >= ex; j -- ) sa += a[j][1], vis[j][1] = 1; } } else{ { int aa = I / 4, b = I % 4; if (aa == 0){ for (int j = sy; j <= n; j ++ ) sa += a[1][j], vis[1][j] = 1; } else if (aa == 1){ for (int j = sx; j <= n; j ++ ) sa += a[j][n], vis[j][n] = 1; } else if (aa == 2){ for (int j = sy; j >= 1; j -- ) sa += a[n][j], vis[n][j] = 1; } else if (aa == 3){ for (int j = sx; j >= 1; j -- ) sa += a[j][1], vis[j][1] = 1; } } { int aa = J / 4, b = J % 4; if (aa == 0){ for (int j = 1; j <= sy; j ++ ) sa += a[1][j], vis[1][j] = 1; } else if (aa == 1){ for (int j = 1; j <= sx; j ++ ) sa += a[j][n], vis[j][n] = 1; } else if (aa == 2){ for (int j = n; j >= sy; j -- ) sa += a[n][j], vis[n][j] = 1; } else if (aa == 3){ for (int j = n; j >= sx; j -- ) sa += a[j][1], vis[j][1] = 1; } } for (int aa = I / 4 + 1; aa < J / 4; aa ++ ){ if (aa == 0){ for (int j = 1; j <= n; j ++ ) if (!vis[1][j]) sa += a[1][j], vis[1][j] = 1; } else if (aa == 1){ for (int j = 1; j <= n; j ++ ) if (!vis[j][n]) sa += a[j][n], vis[j][n] = 1; } else if (aa == 2){ for (int j = n; j >= 1; j -- ) if (!vis[n][j]) sa += a[n][j], vis[n][j] = 1; } else if (aa == 3){ for (int j = n; j >= 1; j -- ) if (!vis[j][1]) sa += a[j][1], vis[j][1] = 1; } } } for (int m = 0; m < (1 << 9); m ++ ){ for (int i = 0; i < 25; i ++ ) lstp[i] = p[i]; for (int j = 0; j < 9; j ++ ) if (((m >> j) & 1)){ int x = j / 3, y = j % 3; x ++, y ++; vis[x][y] = 1; } int cnt1 = 0; queue q; q.push({sx, sy}); vector > qwq(6, vector (6)); while (q.size()){ int x = q.front().fi, y = q.front().se; q.pop(); if (qwq[x][y]) continue; qwq[x][y] = 1, cnt1 ++ ; for (int u = 0; u < 4; u ++ ){ int nx = x + dx[u], ny = y + dy[u]; if (nx < 1 || nx >n || ny < 1 || ny > n) continue; if (vis[nx][ny]) q.push({nx, ny}); } } int cnt2 = 0; while (q.size()) q.pop(); for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ){ if (!vis[i][j] && !q.size()) q.push({i, j}); qwq[i][j] = false; } while (q.size()){ int x = q.front().fi, y = q.front().se; q.pop(); if (qwq[x][y]) continue; qwq[x][y] = 1, cnt2 ++ ; for (int u = 0; u < 4; u ++ ){ int nx = x + dx[u], ny = y + dy[u]; if (nx < 1 || nx >n || ny < 1 || ny > n) continue; if (!vis[nx][ny]) q.push({nx, ny}); } } if (cnt1 + cnt2 == 25){ int x = abs(sa - (all - sa)); ans = min(ans, x); } for (int i = 0; i < 25; i ++ ) p[i] = lstp[i]; } } cout << ans << "\n"; } void single(){ init(), solve(); } void multi(){ init(); int T; cin >> T; while (T -- ) solve(); } void idmulti(){ init(); int id, T; cin >> id >> T; while (T -- ) solve(); } }; signed main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ARIS0_0::single(); } /* 注意到最外圈有两个或零个切口 枚举这两个,假设中间某一段是 A,另一段是 B 然后向中间扩张 中间只有 3*3!!! 于是可以 2^9 枚举!!! 然后判断联通即可! 联通! fish_love_dsu!!! 靠怎么变量名重名了,i -> I, j -> J 得了 */