/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.Map.Entry;
import java.util.AbstractMap.SimpleEntry;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone{
int row, col, n = 6;
int[][] grid = new int[n][n], cCount = new int[n][2], rCount = new int[n][2];
Deque
<Entry
<Integer,Integer
>> s
= new ArrayDeque
<Entry
<Integer,Integer
>>();
for(int i = 0; i < grid.length; i++){
for(int j = 0; j < grid[0].length; j++){
// Constraints: row, col {-1, 0, 1}. -1 = no constraint.
row = j > 1 && grid[i][j-2] == grid[i][j-1] ? (grid[i][j-1] == 0 ? 1:0):
(rCount[i][0] >= n/2 ? 1: (rCount[i][1] >= n/2 ? 0:-1));
col = i > 1 && grid[i-2][j] == grid[i-1][j] ? (grid[i-1][j] == 0 ? 1:0):
(cCount[j][0] >= n/2 ? 1: (cCount[j][1] >= n/2 ? 0:-1));
grid[i][j] = row == -1 && col == -1 ? rand.nextInt(2):(row > -1 ? row:col);
if( row == -1 && col == -1){ // no constraint
s.
push(new SimpleEntry
<Integer,Integer
>(i, j
)); } else if( (row > -1 && col > -1 && row != col) // constraint conflict
|| (row > -1 && rCount[i][row] == n/2) // count conflict
|| (col > -1 && cCount[j][col] == n/2)){ // count conflict
Entry
<Integer, Integer
> last
= s.
pop(); while(i > last.getKey() || j > last.getValue()){
j = (j-1+ n)%n; // step indices back
i = (j == n-1) ? i-1:i;
rCount[i][grid[i][j]]--; // reduce counters
cCount[j][grid[i][j]]--;
}
grid[i][j] = grid[i][j] == 0 ? 1:0; // flip value
}
rCount[i][grid[i][j]]++; // increment counters
cCount[j][grid[i][j]]++;
}
}
for(int i = 0; i < grid.length; i++){
for(int j = 0; j < grid[0].length; j++)
System.
out.
print(grid
[i
][j
] + " "); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OwppbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TWFwLlNpbXBsZUVudHJ5OwoKLyogTmFtZSBvZiB0aGUgY2xhc3MgaGFzIHRvIGJlICJNYWluIiBvbmx5IGlmIHRoZSBjbGFzcyBpcyBwdWJsaWMuICovCmNsYXNzIElkZW9uZXsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbnsKCQlpbnQgcm93LCBjb2wsIG4gPSA2OwoJICAgIGludFtdW10gZ3JpZCA9IG5ldyBpbnRbbl1bbl0sIGNDb3VudCA9IG5ldyBpbnRbbl1bMl0sIHJDb3VudCA9IG5ldyBpbnRbbl1bMl07CgkgICAgRGVxdWU8RW50cnk8SW50ZWdlcixJbnRlZ2VyPj4gcyA9IG5ldyBBcnJheURlcXVlPEVudHJ5PEludGVnZXIsSW50ZWdlcj4+KCk7CgkJCgkgICAgUmFuZG9tIHJhbmQ9bmV3IFJhbmRvbSgpOwoJICAgIGZvcihpbnQgaSA9IDA7IGkgPCBncmlkLmxlbmd0aDsgaSsrKXsKCSAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IGdyaWRbMF0ubGVuZ3RoOyBqKyspewoJICAgICAgICAgICAgLy8gQ29uc3RyYWludHM6IHJvdywgY29sIHstMSwgMCwgMX0uICAtMSA9IG5vIGNvbnN0cmFpbnQuCgkgICAgICAgICAgICByb3cgPSBqID4gMSAmJiBncmlkW2ldW2otMl0gPT0gZ3JpZFtpXVtqLTFdID8gKGdyaWRbaV1bai0xXSA9PSAwID8gMTowKTogCgkgICAgICAgICAgICAJCShyQ291bnRbaV1bMF0gPj0gbi8yID8gMTogKHJDb3VudFtpXVsxXSA+PSBuLzIgPyAwOi0xKSk7CgkgICAgICAgICAgICBjb2wgPSBpID4gMSAmJiBncmlkW2ktMl1bal0gPT0gZ3JpZFtpLTFdW2pdID8gKGdyaWRbaS0xXVtqXSA9PSAwID8gMTowKToKCSAgICAgICAgICAgIAkJKGNDb3VudFtqXVswXSA+PSBuLzIgPyAxOiAoY0NvdW50W2pdWzFdID49IG4vMiA/IDA6LTEpKTsKCSAgICAgICAgICAgIGdyaWRbaV1bal0gPSByb3cgPT0gLTEgJiYgY29sID09IC0xID8gcmFuZC5uZXh0SW50KDIpOihyb3cgPiAtMSA/IHJvdzpjb2wpOwoJICAgICAgICAgICAgCgkgICAgICAgICAgICBpZiggcm93ID09IC0xICYmIGNvbCA9PSAtMSl7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBubyBjb25zdHJhaW50CgkgICAgICAgICAgICAgICAgcy5wdXNoKG5ldyBTaW1wbGVFbnRyeTxJbnRlZ2VyLEludGVnZXI+KGksIGopKTsKCSAgICAgICAgICAgIH0gZWxzZSBpZiggKHJvdyA+IC0xICYmIGNvbCA+IC0xICYmIHJvdyAhPSBjb2wpICAgICAgIC8vIGNvbnN0cmFpbnQgY29uZmxpY3QKCSAgICAgICAgICAgICAgICAgICAgfHwgKHJvdyA+IC0xICYmIHJDb3VudFtpXVtyb3ddID09IG4vMikgICAgICAgIC8vIGNvdW50IGNvbmZsaWN0CgkgICAgICAgICAgICAgICAgICAgIHx8IChjb2wgPiAtMSAmJiBjQ291bnRbal1bY29sXSA9PSBuLzIpKXsgICAgICAvLyBjb3VudCBjb25mbGljdAoJICAgICAgICAgICAgICAgIEVudHJ5PEludGVnZXIsIEludGVnZXI+IGxhc3QgPSBzLnBvcCgpOwoJICAgICAgICAgICAgICAgIHdoaWxlKGkgPiBsYXN0LmdldEtleSgpIHx8IGogPiBsYXN0LmdldFZhbHVlKCkpewoJICAgICAgICAgICAgICAgICAgICBqID0gKGotMSsgbiklbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RlcCBpbmRpY2VzIGJhY2sKCSAgICAgICAgICAgICAgICAgICAgaSA9IChqID09IG4tMSkgPyBpLTE6aTsgICAKCSAgICAgICAgICAgICAgICAgICAgckNvdW50W2ldW2dyaWRbaV1bal1dLS07ICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZHVjZSBjb3VudGVycwoJICAgICAgICAgICAgICAgICAgICBjQ291bnRbal1bZ3JpZFtpXVtqXV0tLTsKCSAgICAgICAgICAgICAgICB9CgkgICAgICAgICAgICAgICAgZ3JpZFtpXVtqXSA9IGdyaWRbaV1bal0gPT0gMCA/IDE6MDsgICAgICAgICAgICAgICAvLyBmbGlwIHZhbHVlCgkgICAgICAgICAgICB9CgoJICAgICAgICAgICAgckNvdW50W2ldW2dyaWRbaV1bal1dKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IGNvdW50ZXJzCgkgICAgICAgICAgICBjQ291bnRbal1bZ3JpZFtpXVtqXV0rKzsKCSAgICAgICAgfQoJICAgIH0KCQkKCQlmb3IoaW50IGkgPSAwOyBpIDwgZ3JpZC5sZW5ndGg7IGkrKyl7CiAgICAJCWZvcihpbnQgaiA9IDA7IGogPCBncmlkWzBdLmxlbmd0aDsgaisrKQogICAgCQkJU3lzdGVtLm91dC5wcmludChncmlkW2ldW2pdICsgIiAgIik7CiAgICAJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJCX0KCX0KfQ==