Input: Operations: ["DetectSquares", "add", "add", "add", "count", "count", "add", "count"]
Arguments: [[], [[3, 10]], [[11, 2]], [[3, 2]], [[11, 10]], [[14, 8]], [[11, 2]], [[11, 10]]]
Output: [null, null, null, null, 1, 0, null, 2]
Explanation: detectSquares.add([3, 10]); // Adds point (3,10)
detectSquares.add([11, 2]); // Adds point (11,2)
detectSquares.add([3, 2]); // Adds point (3,2)
detectSquares.count([11, 10]); // Query point (11,10). The other three points are (3,10), (11,2), (3,2). These four form an axis-aligned square. Returns 1.
detectSquares.count([14, 8]); // Query point (14,8). No existing points can form a square with it. Returns 0.
detectSquares.add([11, 2]); // Adds a duplicate point (11,2). Now we have two (11,2) points.
detectSquares.count([11, 10]); // Query point (11,10). Two ways to form a square:
// 1. Using (3,10), first (11,2), (3,2).
// 2. Using (3,10), second (11,2), (3,2).
// Returns 2.