import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { private static Scanner sc; private static int[][] neg8 = new int[][]{{-1, -1}, {0, -1}, {1, -1}, {-1, 0}, {1, 0}, {-1, 1}, {0, 1}, {1, 1}}; private static int[][] neg4 = new int[][]{{1, 0}, {0, -1}, {-1, 0}, {0, 1}}; public static void main(String[] args) { Main instance = new Main(); sc = instance.new Scanner(); instance.solve(); } private void solve() { try { int N = sc.nextInt(); int[]a = new int[N]; for (int i = 0; i < N; i++) { a[i] = sc.nextInt(); } int[]b = new int[N]; for (int i = 0; i < N; i++) { b[i] = sc.nextInt(); } List> al = new ArrayList<>(); { Arrays.sort(a); al.add(genList(a)); while (nextPermutation(a)) { al.add(genList(a)); } } List> bl = new ArrayList<>(); { Arrays.sort(b); bl.add(genList(b)); while (nextPermutation(b)) { bl.add(genList(b)); } } int gameCount = 0; int totalWinA = 0; for (List inta : al) { for (List intb : bl) { gameCount++; int win = 0; for (int i = 0; i < N; i++) { if (intb.get(i) < inta.get(i)) win++; } if ((N/2) < win) totalWinA++; } } System.out.println(totalWinA / (float)gameCount); } catch (Exception e) { e.printStackTrace(); } } private List genList(int[]arr) { List res = new ArrayList<>(); for (int i : arr) { res.add(i); } return res; } private class Scanner { String[] s; int i; BufferedReader br; String regex = " "; public Scanner() { s = new String[0]; i = 0; br = new BufferedReader(new InputStreamReader(System.in)); } @Override protected void finalize() throws Throwable { try { super.finalize(); } finally { destruction(); } } private void destruction() throws IOException { if (br != null) br.close(); } public String next() throws IOException { if (i < s.length) return s[i++]; String st = br.readLine(); while (st == "") st = br.readLine(); s = st.split(regex, 0); i = 0; return s[i++]; } public int nextInt() throws NumberFormatException, IOException { return Integer.parseInt(next()); } public Long nextLong() throws NumberFormatException, IOException { return Long.parseLong(next()); } public Double nextDouble() throws NumberFormatException, IOException { return Double.parseDouble(next()); } } private static double distance(int x1, int x2, int y1, int y2) { return Math.sqrt((Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2))); } private static boolean nextPermutation(int[] nums) { int i = nums.length - 2; while (i >= 0 && nums[i + 1] <= nums[i]) { i--; } boolean swap = false; if (i >= 0) { int j = nums.length - 1; while (j >= 0 && nums[j] <= nums[i]) { j--; } swap(nums, i, j); swap = true; } reverse(nums, i + 1); return swap; } private static void reverse(int[] nums, int start) { int i = start, j = nums.length - 1; while (i < j) { swap(nums, i, j); i++; j--; } } private static void swap(int[] nums, int i, int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; } }