/* 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
{
private char[][] pixels;
public Ideone(char[][] pixels) {
this.pixels = pixels;
}
public void fill(int x, int y, char newColor, char oldColor) {
if (x < 0) return;
if (y < 0) return;
if (x >= pixels.length) return;
if (y >= pixels[x].length) return;
if (oldColor != pixels[x][y]) return;
pixels[x][y] = newColor;
fill(x - 1, y, newColor, oldColor);
fill(x + 1, y, newColor, oldColor);
fill(x, y - 1, newColor, oldColor);
fill(x, y + 1, newColor, oldColor);
}
public void inspect() {
for (int y = 0; y < pixels.length; y++) {
for (int x = 0; x < pixels[y].length; x++) {
System.
out.
print(pixels
[y
][x
]); }
}
}
public static void main
(String argv
[]) { char pixels[][] =
{
{ 'O', 'X', 'X', 'X', 'X' },
{ 'X', 'O', 'O', 'O', 'X' },
{ 'X', 'O', '#', 'O', 'X' },
{ 'X', 'O', 'O', 'O', 'X' },
{ 'X', 'X', 'X', 'X', 'X' },
{ 'X', 'X', 'X', '#', '#' },
{ 'X', 'X', 'X', 'X', 'X' }
};
Ideone bucketFill = new Ideone(pixels);
bucketFill.fill(0, 0, '*', 'O');
bucketFill.fill(3, 0, 'O', 'O');
bucketFill.fill(2, 1, '@', 'O');
bucketFill.inspect();
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCiAgICBwcml2YXRlIGNoYXJbXVtdIHBpeGVsczsKCiAgICBwdWJsaWMgSWRlb25lKGNoYXJbXVtdIHBpeGVscykgewogICAgICAgIHRoaXMucGl4ZWxzID0gcGl4ZWxzOwogICAgfQoKICAgIHB1YmxpYyB2b2lkIGZpbGwoaW50IHgsIGludCB5LCBjaGFyIG5ld0NvbG9yLCBjaGFyIG9sZENvbG9yKSB7CiAgICAgICAgaWYgKHggPCAwKSByZXR1cm47CiAgICAgICAgaWYgKHkgPCAwKSByZXR1cm47CiAgICAgICAgaWYgKHggPj0gcGl4ZWxzLmxlbmd0aCkgcmV0dXJuOwogICAgICAgIGlmICh5ID49IHBpeGVsc1t4XS5sZW5ndGgpIHJldHVybjsKCiAgICAgICAgaWYgKG9sZENvbG9yICE9IHBpeGVsc1t4XVt5XSkgcmV0dXJuOwoKICAgICAgICBwaXhlbHNbeF1beV0gPSBuZXdDb2xvcjsKCiAgICAgICAgZmlsbCh4IC0gMSwgeSwgbmV3Q29sb3IsIG9sZENvbG9yKTsKICAgICAgICBmaWxsKHggKyAxLCB5LCBuZXdDb2xvciwgb2xkQ29sb3IpOwogICAgICAgIGZpbGwoeCwgeSAtIDEsIG5ld0NvbG9yLCBvbGRDb2xvcik7CiAgICAgICAgZmlsbCh4LCB5ICsgMSwgbmV3Q29sb3IsIG9sZENvbG9yKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBpbnNwZWN0KCkgewogICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcGl4ZWxzLmxlbmd0aDsgeSsrKSB7CiAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcGl4ZWxzW3ldLmxlbmd0aDsgeCsrKSB7CiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KHBpeGVsc1t5XVt4XSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXG4iKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3ZbXSkgewogICAgICAgIGNoYXIgcGl4ZWxzW11bXSA9CiAgICAgICAgewogICAgICAgICAgICB7ICdPJywgJ1gnLCAnWCcsICdYJywgJ1gnIH0sCiAgICAgICAgICAgIHsgJ1gnLCAnTycsICdPJywgJ08nLCAnWCcgfSwKICAgICAgICAgICAgeyAnWCcsICdPJywgJyMnLCAnTycsICdYJyB9LAogICAgICAgICAgICB7ICdYJywgJ08nLCAnTycsICdPJywgJ1gnIH0sCiAgICAgICAgICAgIHsgJ1gnLCAnWCcsICdYJywgJ1gnLCAnWCcgfSwKICAgICAgICAgICAgeyAnWCcsICdYJywgJ1gnLCAnIycsICcjJyB9LAogICAgICAgICAgICB7ICdYJywgJ1gnLCAnWCcsICdYJywgJ1gnIH0KICAgICAgICB9OwogICAgICAgIElkZW9uZSBidWNrZXRGaWxsID0gbmV3IElkZW9uZShwaXhlbHMpOwogICAgICAgIGJ1Y2tldEZpbGwuZmlsbCgwLCAwLCAnKicsICdPJyk7CiAgICAgICAgYnVja2V0RmlsbC5maWxsKDMsIDAsICdPJywgJ08nKTsKICAgICAgICBidWNrZXRGaWxsLmZpbGwoMiwgMSwgJ0AnLCAnTycpOwogICAgICAgIGJ1Y2tldEZpbGwuaW5zcGVjdCgpOwogICAgfQp9