class Solution {
public:
    void gameOfLife(vector<vector<int>>& board) {
        if(board.empty())
            return;
            
        int row = board.size();
        int col = board[0].size();
        
        for(int i=0; i<row; i++){
            for(int j=0; j<col; j++){
                int cell = board[i][j];
                int liveCount=0;
                
                for(int p = i-1; p<=i+1; p++)
                    for(int q=j-1; q<=j+1; q++){
                        if(p<0||p>=row||q<0||q>=col||(p==i&&q==j))
                            continue;
                        liveCount = (board[p][q]&1)==1? liveCount+1:liveCount;
                    }
                
                if(cell==1){
                    if(liveCount==2||liveCount==3)
                        board[i][j]=3;
                }else
                    if(liveCount==3)
                        board[i][j]=2;
            }
        }
        
        for(int i=0; i<row; i++)
            for(int j=0; j<col; j++)
                board[i][j]=board[i][j]>>1;
    }
};