import std; void main () { int N = readln.chomp.to!int; auto A = readln.split.to!(int[]); auto B = readln.split.to!(int[]); // ハチマキの本数がキモ // 一本消したとき、昇順同士でマッチさせるしかない。 // となると、前i本同士でマッチングさせたときのコストと // 後ろi本同士でマッチングさせたときのコストがわかれば一本抜いた時のコストがわかる。 auto acc = new long[](N); auto racc = new long[](N); A.sort; B.sort; foreach (i; 0 .. N - 1) { acc[i + 1] = acc[i] + abs(A[i] - B[i]); } foreach (i; 0 .. N - 1) { racc[i + 1] = racc[i] + abs(A[$ - i - 1] - B[$ - i - 1]); } auto score = new Tuple!(int, long)[](0); foreach (i; 0 .. N) { // A[i]を消す score ~= tuple(A[i], acc[i] + racc[N - 1 - i]); } score.sort!((a, b) => a[1] < b[1]); auto ans = new int[](0); int l = 0, r = 0; while (l < N) { while (r < N) { if (score[l][1] != score[r][1]) break; r++; } foreach (i; l .. r) ans ~= score[i][0]; break; } ans = ans.sort.uniq.array; writeln(ans.length); writefln("%(%s %)", ans); } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }