/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static int[] sort(int[] a) {
if (a.length == 1) return a;
int middle = a.length / 2;
int[] h1 = new int[middle];
int[] h2 = new int[a.length - middle];
for (int i = 0; i < middle; i++) h1[i] = a[i];
for (int i = middle; i < a.length; i++) h2[i] = a[i];
int[] r1 = sort(h1);
int[] r2 = sort(h2);
return merge(r1, r2);
}
static int[] merge(int[] a1, int[] a2) {
int[] r = new int[a1.length + a2.length];
int p1 = 0, p2 = 0;
for (int i = 0; i < r.length; i++) {
if (p2 == a2.length || p1 < a1.length && a1[p1] <= a2[p2]) {
r[i] = a1[p1];
p1++;
}
else {
r[i] = a2[p2];
p2++;
}
}
return r;
}
{
System.
out.
println(java.
util.
Arrays.
toString(sort
(new int[] {3,
1,
2}))); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXN0YXRpYyBpbnRbXSBzb3J0KGludFtdIGEpIHsKCQlpZiAoYS5sZW5ndGggPT0gMSkgcmV0dXJuIGE7CgkJCgkJaW50IG1pZGRsZSA9IGEubGVuZ3RoIC8gMjsKCQlpbnRbXSBoMSA9IG5ldyBpbnRbbWlkZGxlXTsKCQlpbnRbXSBoMiA9IG5ldyBpbnRbYS5sZW5ndGggLSBtaWRkbGVdOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgbWlkZGxlOyBpKyspIGgxW2ldID0gYVtpXTsKCQlmb3IgKGludCBpID0gbWlkZGxlOyBpIDwgYS5sZW5ndGg7IGkrKykgaDJbaV0gPSBhW2ldOwoJCWludFtdIHIxID0gc29ydChoMSk7CgkJaW50W10gcjIgPSBzb3J0KGgyKTsKCQlyZXR1cm4gbWVyZ2UocjEsIHIyKTsKCX0KCQoJc3RhdGljIGludFtdIG1lcmdlKGludFtdIGExLCBpbnRbXSBhMikgewoJCWludFtdIHIgPSBuZXcgaW50W2ExLmxlbmd0aCArIGEyLmxlbmd0aF07CgkJaW50IHAxID0gMCwgcDIgPSAwOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgci5sZW5ndGg7IGkrKykgewoJCQlpZiAocDIgPT0gYTIubGVuZ3RoIHx8IHAxIDwgYTEubGVuZ3RoICYmIGExW3AxXSA8PSBhMltwMl0pIHsKCQkJCXJbaV0gPSBhMVtwMV07CgkJCQlwMSsrOwoJCQl9CgkJCWVsc2UgewoJCQkJcltpXSA9IGEyW3AyXTsKCQkJCXAyKys7CgkJCX0KCQl9CgkJcmV0dXJuIHI7Cgl9CgkKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN5c3RlbS5vdXQucHJpbnRsbihqYXZhLnV0aWwuQXJyYXlzLnRvU3RyaW5nKHNvcnQobmV3IGludFtdIHszLCAxLCAyfSkpKTsKCX0KfQ==