private static boolean testPolyomino(boolean[][] polyomino){
        boolean[][] negative = new boolean[polyomino[0].length][polyomino.length];
        for (int x=0; x<polyomino.length; x++){
            fillWithConstraints(negative, polyomino, x, 0);
            fillWithConstraints(negative, polyomino, x, polyomino[0].length-1);
        }
        for (int y=1; y<polyomino.length-1; y++){
            fillWithConstraints(negative, polyomino, 0, y);
            fillWithConstraints(negative, polyomino, polyomino.length-1, y);
        }
        for (int x=0; x<polyomino.length; x++){
            for (int y=0; y<polyomino[0].length; y++){
                if (! (polyomino[x][y] || negative[x][y])){
                    return false;
                }
            }
        }
        int[] seqA = getSequence(polyomino);
        for (int seq:seqA){
            if (polyID.contains(seq)) return false;
        }
        polyID.add(seqA[0]);
        
        return true;
    }