编程题
### 问题描述
阿坤老师是学校的数学老师,他特别喜欢让学生挑战一些有趣的数学问题。今天,他给学生带来了一个巨大的魔方。这个魔方的每个面都是一个 $N \times N$ 的方阵,每个小格子上都填有一个整数。
阿坤老师允许学生按行或者按列,将魔方的一个面上的所有行或者所有列,循环移动若干个位置。他希望学生通过移动行或列,使得主对角线(左上角到右下角)上的数字之和最大。
请问,应该如何移动,才能得到最大的主对角线数字之和?
### 输入格式
第一行包含一个整数 $N$,表示魔方的一个面上方阵的大小。
接下来的 $N$ 行,每行包含 $N$ 个整数,表示方阵的每个元素。
### 输出格式
输出一个整数,表示最大可能的主对角线元素之和。
### 样例输入
```
3
7 8 9
4 5 7
1 2 3
```
### 样例输出
```
16
```
### 说明
对于样例 $\begin{pmatrix}7 & 8 & 9\\\\4 & 5 & 7\\\\1 & 2 & 3\end{pmatrix}$ 我们可以将第 $3$ 行整体下移一行变换为 $\begin{pmatrix}1 & 2 & 3\\\\7 & 8 & 9\\\\4 & 5 & 7\end{pmatrix}$,此时主对角线为元素之和为 $1+8+7=16$。
### 数据范围与约定
* $1 \leq N \leq 500$。
* 方阵中的元素为整数,范围在 $-10^5$ 到 $10^5$ 之间。