import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Stavitel {

    static StringTokenizer st = new StringTokenizer("");
    static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
    //static BufferedReader input;

    static String nextToken() throws Exception {
        while (!st.hasMoreTokens()) {
            st = new StringTokenizer(input.readLine());
        }
        return st.nextToken();
    }

    static int nextInt() throws Exception {
        return Integer.parseInt(nextToken());
    }
    
    public static int max(int a, int b) {
        if (a > b)
            return a;
        return b;
    }

    public static int min(int a, int b) {
        if (a < b)
            return a;
        return b;
    }

    public static void main(String[] args) throws IOException, Exception {
        String line;

        //input = new BufferedReader(new InputStreamReader(new FileInputStream("test.in")));
        while ((line = input.readLine()) != null) {
            st = new StringTokenizer(line);

            int N = nextInt();

            for (int x = 0; x < N; x++) {
                int K = Integer.parseInt(input.readLine());

                int front[] = new int[K];
                int side[] = new int[K];
                
                line = input.readLine();
                st = new StringTokenizer(line);

                int fcounts[] = new int [100001];
                int scounts[] = new int [100001];
                //int scounts[] = new int [5];

                for (int y = 0; y < K; y++) {
                    front[y] = nextInt();
                    fcounts[front[y]]++;
                }

                int sumside = 0;
                for (int y = 0; y < K; y++) {
                    side[y] = nextInt();
                    sumside += side[y];
                    scounts[side[y]]++;
                }

                Arrays.sort(front);
                Arrays.sort(side);

                // get max
                int sum = 0;
                int sumfront = 0;
                for (int i = 0; i < K; i++) {
                    if (front[i] == 0) continue;
                    
                    sumfront += front[i];

                    for (int j = 0; j < K; j++) {
                        // donasobime do konce
                        if (side[j] == front[i]) {
                            sum += side[j] * (K - j);
                            break;
                        } else {
                            sum += min(front[i], side[j]);
                        }
                    }
                }
                //System.out.println(sum);
                
                //int L = max(sumfront, sumside);
                int M = sum;
                
                
                // get min
                sum = 0;
                int km = max(front[K - 1], side[K - 1]);
                for (int i = 1; i <= km; i++) {
                    int kl = max(fcounts[i], scounts[i]);
                    sum += kl * i;
                }
                
                int L = sum;
                
                System.out.println("Minimalni budova obsahuje "+L+" kostek, maximalni "+M+" kostek.");

                
            }

            //System.out.println();
        }

    }

}
