using System; using System.Linq; class Solution { private static readonly int[] referenceSquare = { 2, 7, 6, 9, 5, 1, 4, 3, 8 }; private static int[] ReflectHorizontal(int[] square) { var result = new int[9]; for (var i = 0; i < 3; ++i) { for (var j = 0; j < 3; ++j) { result[i * 3 + j] = square[i * 3 + (2 - j)]; } } return result; } private static int[] ReflectVertical(int[] square) { var result = new int[9]; for (var i = 0; i < 3; ++i) { for (var j = 0; j < 3; ++j) { result[i * 3 + j] = square[(2 - i) * 3 + j]; } } return result; } private static int[] Rotate(int[] square) { var result = new int[9]; for (var i = 0; i < 3; ++i) { for (var j = 0; j < 3; ++j) { result[i * 3 + j] = square[j * 3 + (2 - i)]; } } return result; } private static int[][] GenerateMagicSquares() { var squares = new int[8][]; for (var i = 0; i < 8; ++i) { squares[i] = new int[9]; } squares[0] = referenceSquare; squares[1] = ReflectHorizontal(referenceSquare); squares[2] = ReflectVertical(referenceSquare); squares[3] = ReflectHorizontal(squares[2]); squares[4] = Rotate(referenceSquare); squares[5] = ReflectHorizontal(squares[4]); squares[6] = ReflectVertical(squares[4]); squares[7] = ReflectHorizontal(squares[6]); return squares; } private static int GetCost(int[] input, int[] target) { return input.Select((a, i) => Math.Abs(target[i] - a)).Sum(); } private static bool TestSquare(int[] square) { return ((square[0] + square[1] + square[2]) == 15) && ((square[3] + square[4] + square[5]) == 15) && ((square[6] + square[7] + square[8]) == 15) && ((square[0] + square[3] + square[6]) == 15) && ((square[1] + square[4] + square[7]) == 15) && ((square[2] + square[5] + square[8]) == 15) && ((square[0] + square[4] + square[8]) == 15) && ((square[2] + square[4] + square[6]) == 15); } static void Main(String[] args) { var input = new int[9]; for (var i = 0; i < 3; ++i) { var row = Console.ReadLine().Split().Select(int.Parse).ToArray(); for (var j = 0; j < 3; ++j) { input[i * 3 + j] = row[j]; } } var squares = GenerateMagicSquares(); var minCost = squares.Select(s => GetCost(input, s)).Min(); Console.WriteLine(minCost); } }