You have a grid of squares. Your job is to draw lines between the center of horizontally or vertically adjacent squares, so that the lines form a single closed loop.
In the resulting grid, some of the squares that the loop passes through will contain corners, and some will be straight horizontal or vertical lines. (And some squares can be completely empty – the loop doesn't have to pass through every square.)
Some of the squares contain filled and blank circles, which are clues that the loop must satisfy.
A blank circle in a square indicates that that square is a corner, but neither of the squares adjacent to it in the loop is also a corner.
A filled circle indicates that the square is a straight edge, but at least one of the squares adjacent to it in the loop is a corner.