Simple Rule - Java Solution 
```\nclass Solution {\n    public boolean validTicTacToe(String[] board) {\n        int cntX = 0, cntO = 0, winX = 0, winO = 0; \n        char[][] BD = new char
```\nclass Solution {\n    public boolean validTicTacToe(String[] board) {\n        int cntX = 0, cntO = 0, winX = 0, winO = 0; \n        char[][] BD = new char[3][3];  \n        for (int i = 0; i < 3; i++) \n            for (int j = 0; j < 3; j++) { \n                BD[i][j] = board[i].charAt(j); \n                if (BD[i][j] == \'X\') cntX++;\n                if (BD[i][j] == \'O\') cntO++;\n            }\n        \n        if (cntX < cntO || cntX > cntO + 1) return false;\n\n        if ((BD[0][0] == BD[1][0] && BD[1][0] == BD[2][0]) || (BD[0][0] == BD[0][1] && BD[0][1] == BD[0][2]))\n            if (BD[0][0] == \'X\') winX++; \n            else if (BD[0][0] == \'O\') winO++; \n\n        if ((BD[0][2] == BD[1][2] && BD[1][2] == BD[2][2]) || (BD[2][0] == BD[2][1] && BD[2][1] == BD[2][2]))\n            if (BD[2][2] == \'X\') winX++; \n            else if (BD[2][2] == \'O\') winO++; \n\n        if ((BD[0][0] == BD[1][1] && BD[1][1] == BD[2][2]) || (BD[0][2] == BD[1][1] && BD[1][1] == BD[2][0]) ||\n           (BD[0][1] == BD[1][1] && BD[1][1] == BD[2][1]) || (BD[1][0] == BD[1][1] && BD[1][1] == BD[1][2]))\n            if (BD[1][1] == \'X\') winX++; \n            else if (BD[1][1] == \'O\') winO++; \n        \n        return !((winX > 0 && winO > 0) || (cntX == cntO && winX > 0) || (cntX == cntO + 1 && winO > 0)) ;\n    }\n}
[]