Array Balancing
Contest: Educational Codeforces Round 126 (Rated for Div. 2)
Difficulty rating: 800
Tags: greedy, math

You are given two arrays of length $$$n$$$: $$$a_1, a_2, \dots, a_n$$$ and $$$b_1, b_2, \dots, b_n$$$.

You can perform the following operation any number of times:

1. Choose integer index $$$i$$$ ($$$1 \le i \le n$$$);
2. Swap $$$a_i$$$ and $$$b_i$$$.

What is the minimum possible sum $$$|a_1 - a_2| + |a_2 - a_3| + \dots + |a_{n-1} - a_n|$$$ $$$+$$$ $$$|b_1 - b_2| + |b_2 - b_3| + \dots + |b_{n-1} - b_n|$$$ (in other words, $$$\sum\limits_{i=1}^{n - 1}{\left(|a_i - a_{i+1}| + |b_i - b_{i+1}|\right)}$$$) you can achieve after performing several (possibly, zero) operations?

Input format:
The first line contains a single integer $$$t$$$ ($$$1 \le t \le 4000$$$) — the number of test cases. Then, $$$t$$$ test cases follow.

The first line of each test case contains the single integer $$$n$$$ ($$$2 \le n \le 25$$$) — the length of arrays $$$a$$$ and $$$b$$$.

The second line of each test case contains $$$n$$$ integers $$$a_1, a_2, \dots, a_n$$$ ($$$1 \le a_i \le 10^9$$$) — the array $$$a$$$.

The third line of each test case contains $$$n$$$ integers $$$b_1, b_2, \dots, b_n$$$ ($$$1 \le b_i \le 10^9$$$) — the array $$$b$$$.

Output format:
For each test case, print one integer — the minimum possible sum $$$\sum\limits_{i=1}^{n-1}{\left(|a_i - a_{i+1}| + |b_i - b_{i+1}|\right)}$$$.

Constraints:
Time limit: 2.0 s
Memory limit: 256.0 MB

Note:
In the first test case, we can, for example, swap $$$a_3$$$ with $$$b_3$$$ and $$$a_4$$$ with $$$b_4$$$. We'll get arrays $$$a = [3, 3, 3, 3]$$$ and $$$b = [10, 10, 10, 10]$$$ with sum $$$3 \cdot |3 - 3| + 3 \cdot |10 - 10| = 0$$$.

In the second test case, arrays already have minimum sum (described above) equal to $$$|1 - 2| + \dots + |4 - 5| + |6 - 7| + \dots + |9 - 10|$$$ $$$= 4 + 4 = 8$$$.

In the third test case, we can, for example, swap $$$a_5$$$ and $$$b_5$$$.

Example input:
3
4
3 3 10 10
10 10 3 3
5
1 2 3 4 5
6 7 8 9 10
6
72 101 108 108 111 44
10 87 111 114 108 100

Example output:
0
8
218

Editorial:
Let's look at our arrays $$$a$$$ and $$$b$$$. Note that for any position $$$p$$$ such that $$$|a_{p-1} - a_p| + |b_{p-1} - b_p| > |a_{p-1} - b_p| + |b_{p-1} - a_p|$$$ we can always "fix it" by swapping all positions $$$i$$$ from $$$p$$$ to $$$n$$$. In that case, contribution from all $$$i < p$$$ won't change, contribution of pair $$$(p - 1, p)$$$ will decrease and contribution from all $$$i > p$$$ won't change again, since we swapped all of them.
It means that we already can use the following algorithm: while exists such $$$p$$$ that $$$|a_{p-1} - a_p| + |b_{p-1} - b_p| > |a_{p-1} - b_p| + |b_{p-1} - a_p|$$$ just swap all $$$i$$$ from $$$p$$$ to $$$n$$$. This solution works for $$$O(n^2)$$$ per test, that should be enough.
But we can optimize our approach by realizing that we can (instead of searching $$$p$$$ each time) just go from $$$2$$$ to $$$n$$$ and fix pairs one by one: if $$$|a_1 - a_2| + |b_1 - b_2| > |a_1 - b_2| + |b_1 - a_2|$$$ then swap $$$a_2$$$ with $$$b_2$$$; next, if $$$|a_2 - a_3| + |b_2 - b_3| > |a_2 - b_3| + |b_2 - a_3|$$$ then swap $$$a_3$$$ with $$$b_3$$$ and so on. In such way, solution works in $$$O(n)$$$.