public class Example {
    public static void main(String[] args) {
        boolean m[][] = { { true, false, true, true },
                          { true, false, true, false },
                          { true, false, true, true } };
        System.out.println("++++++++++++");
        Grid g = new Grid(m);
        System.out.println(g);
        System.out.println("++++++++++++");
        g.update();
        System.out.println(g);
        System.out.println("++++++++++++");
    }
}

public class Data {
    private int major;
    private int minor;
    private boolean active;
    public Data(int major, int minor, boolean active) {
        this.major = Math.max(0, major);
        this.minor = Math.max(0, minor);
        this.active = active;
    }

    public int getMajor() {
        return this.major;
    }
    public int getMinor() {
        return this.minor;
    }
    public boolean getActive() {
        return this.active;
    }
    public void parity() {
        this.major = this.major % 2;
        this.minor = this.minor % 2;
    }
    public String toString() {
        return "" + this.major + (this.active ? "**" : "//") + this.minor;
    }
}

public class Grid {
    private Data[] a;
    public Grid(boolean[][] m) {
        this.a = new Data[m[0].length * m.length];
        for (int i = 0; i < m.length; i++) {
            for (int j = 0; j < m[i].length; j++) {
                this.a[(m[0].length * i)+j] = new Data(i, j, m[i][j]);
            }
        }
    }
    public void update() {
        for (int i = 0; i < this.a.length; i++) {
            if (this.a[i].getActive()) {
                this.a[i].parity();
            }
        }
    }

    public String toString() {
        String return_string = "";
        for (int i = 0; i < this.a.length; i++) {
            return_string += this.a[i] + (i == this.a.length - 1 ? "" : "-");
        }
        return return_string;
    }

}
