import java.util.*;
public class Main {
public static void main
(String[] strg
) { int[][] arr = {{1, 1, 1, 1}, {4, 4, 4, 4}, {3, 3, 1, 1}};
numOfColors(arr);
}
static int numOfColors(int[][] map) {
ArrayList<Integer> intlist = new ArrayList<Integer>();
for (int o = 0; o < map.length; o++) {
for (int n = 0; n < map[o].length; n++) {
intlist.add(map[o][n]);
}
}
intlist = removeDuplicates(intlist, 0);
System.
out.
println(intlist.
size()+" " +intlist
); return intlist.size();
}
static ArrayList<Integer> removeDuplicates(ArrayList<Integer> list, int counter) {
if (list == null) {
}
if (counter < list.size()) {
if (list.contains(list.get(counter))) {
if (list.lastIndexOf(list.get(counter)) != counter) {
list.remove(list.lastIndexOf(list.get(counter)));
counter--;
}
}
removeDuplicates(list, ++counter);
}
return list;
}
}
aW1wb3J0IGphdmEudXRpbC4qOwoKcHVibGljIGNsYXNzIE1haW4gewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gc3RyZykgewogICAgICAgIGludFtdW10gYXJyID0ge3sxLCAxLCAxLCAxfSwgezQsIDQsIDQsIDR9LCB7MywgMywgMSwgMX19OwogICAgICAgIG51bU9mQ29sb3JzKGFycik7CiAgICB9CiAgICBzdGF0aWMgaW50IG51bU9mQ29sb3JzKGludFtdW10gbWFwKSB7CiAgICAgICAgQXJyYXlMaXN0PEludGVnZXI+IGludGxpc3QgPSBuZXcgQXJyYXlMaXN0PEludGVnZXI+KCk7CiAgICAgICAgZm9yIChpbnQgbyA9IDA7IG8gPCBtYXAubGVuZ3RoOyBvKyspIHsKICAgICAgICAgICAgZm9yIChpbnQgbiA9IDA7IG4gPCBtYXBbb10ubGVuZ3RoOyBuKyspIHsKICAgICAgICAgICAgICAgIGludGxpc3QuYWRkKG1hcFtvXVtuXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaW50bGlzdCA9IHJlbW92ZUR1cGxpY2F0ZXMoaW50bGlzdCwgMCk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGludGxpc3Quc2l6ZSgpKyIgIiAraW50bGlzdCk7CiAgICAgICAgcmV0dXJuIGludGxpc3Quc2l6ZSgpOwogICAgfQogICAgc3RhdGljIEFycmF5TGlzdDxJbnRlZ2VyPiByZW1vdmVEdXBsaWNhdGVzKEFycmF5TGlzdDxJbnRlZ2VyPiBsaXN0LCBpbnQgY291bnRlcikgewogICAgICAgIGlmIChsaXN0ID09IG51bGwpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IE51bGxQb2ludGVyRXhjZXB0aW9uKCk7CiAgICAgICAgfQogICAgICAgIGlmIChjb3VudGVyIDwgbGlzdC5zaXplKCkpIHsKICAgICAgICAgICAgaWYgKGxpc3QuY29udGFpbnMobGlzdC5nZXQoY291bnRlcikpKSB7CiAgICAgICAgICAgICAgICBpZiAobGlzdC5sYXN0SW5kZXhPZihsaXN0LmdldChjb3VudGVyKSkgIT0gY291bnRlcikgewogICAgICAgICAgICAgICAgICAgIGxpc3QucmVtb3ZlKGxpc3QubGFzdEluZGV4T2YobGlzdC5nZXQoY291bnRlcikpKTsKICAgICAgICAgICAgICAgICAgICBjb3VudGVyLS07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVtb3ZlRHVwbGljYXRlcyhsaXN0LCArK2NvdW50ZXIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlzdDsKICAgIH0KfQoK