import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; /* * To change this template, choose Tools | Templates * and open the template in the editor. */ /** * * @author cteam056 */ public class Stavitel { static StringTokenizer tokenizer = new StringTokenizer(""); static BufferedReader reader; static String nextToken() throws Exception { if (tokenizer.hasMoreTokens()) { return tokenizer.nextToken(); } String line = reader.readLine(); if (line != null) { tokenizer = new StringTokenizer(line); return nextToken(); } return null; } /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { reader = new BufferedReader(new InputStreamReader(System.in)); String line = reader.readLine(); int testcases = Integer.parseInt(line); for (int i = 0; i < testcases; i++) { line = reader.readLine(); int count = Integer.parseInt(line); line = reader.readLine(); String[] elems = line.split(" "); int ints1[] = new int[elems.length]; for (int j = 0; j < elems.length; j++) { ints1[j] = Integer.parseInt(elems[j]); } line = reader.readLine(); elems = line.split(" "); int ints2[] = new int[elems.length]; for (int j = 0; j < elems.length; j++) { ints2[j] = Integer.parseInt(elems[j]); } int max = 0; for (int j = 0; j < ints1.length; j++) { for (int k = 0; k < ints1.length; k++) { max += Math.min(ints1[j], ints2[k]); } } int min = 0; Map map = new HashMap(); for (int j = 0; j < ints1.length; j++) { if (map.containsKey(ints1[j])) { map.put(ints1[j], map.get(ints1[j]) + 1); } else { map.put(ints1[j], 1); } } for (int j = 0; j < ints2.length; j++) { min += ints2[j]; if (map.containsKey(ints2[j])) { if (map.get(ints2[j]) > 1) { map.put(ints2[j], map.get(ints2[j]) - 1); } else { map.remove(ints2[j]); } } } for (int key : map.keySet()) { min += key * map.get(key); } System.out.printf("Minimalni budova obsahuje %d kostek, maximalni %d kostek.%n", min, max); } } }