#CF2046A. 交换列并找一条路径

交换列并找一条路径

A. 交换列并找一条路径
每个测试点时间限制:22
每个测试点内存限制:512512 兆字节

有一个由 22nn 列组成的矩阵。行从上到下编号为 1122,列从左到右编号为 11nn。用 (i,j)(i,j) 表示第 ii 行第 jj 列的格子。每个格子包含一个整数;初始时格子 (i,j)(i,j) 中的整数为 ai,ja_{i,j}

你可以执行以下操作任意多次(可能为零次):

选择两列并交换它们(即选择两个整数 xxyy,满足 1x<yn1 \le x < y \le n,然后交换 a1,xa_{1,x}a1,ya_{1,y},再交换 a2,xa_{2,x}a2,ya_{2,y})。

执行完操作后,你必须选择一条从格子 (1,1)(1,1) 到格子 (2,n)(2,n) 的路径。对于路径上的每个格子(除最后一个外),下一个格子必须是 (i+1,j)(i+1,j)(i,j+1)(i,j+1)。显然,路径不能走出矩阵。

路径的代价是路径上所有格子(共 n+1n+1 个)的整数之和。你需要执行操作并选择路径,使得代价尽可能大。

输入
每个测试包含多个测试用例。第一行包含整数 tt1t50001 \le t \le 5000)——测试用例的数量。
每个测试用例包含三行:

  • 第一行包含一个整数 nn1n50001 \le n \le 5000)——矩阵的列数;
  • 第二行包含 nn 个整数 a1,1,a1,2,,a1,na_{1,1}, a_{1,2}, \dots, a_{1,n}ai,j105|a_{i,j}| \le 10^5)——矩阵的第一行;
  • 第三行包含 nn 个整数 a2,1,a2,2,,a2,na_{2,1}, a_{2,2}, \dots, a_{2,n}ai,j105|a_{i,j}| \le 10^5)——矩阵的第二行。
    保证所有测试用例的 nn 之和不超过 50005000

输出
对于每个测试用例,输出一行一个整数 —— 你能够获得的最大路径代价。

样例

输入

3
1
-10
5
3
1 2 3
10 -5 -3
4
2 8 5 3
1 10 3 4

输出

-5
16
29

样例解释
(图略)