Problem:
Counter-Clockwise

For given three points p0, p1, p2, print

COUNTER_CLOCKWISE

if p0, p1, p2 make a counterclockwise turn (1),

CLOCKWISE

if p0, p1, p2 make a clockwise turn (2),

ONLINE_BACK

if p2 is on a line p2, p0, p1 in this order (3),

ONLINE_FRONT

if p2 is on a line p0, p1, p2 in this order (4),

ON_SEGMENT

if p2 is on a segment p0p1 (5).

Input

xp0 yp0 xp1 yp1
q
xp20 yp20
xp21 yp21
...
xp2q-1 yp2q-1

In the first line, integer coordinates of p0 and p1 are given. Then, q queries are given for integer coordinates of p2.

Output

For each query, print the above mentioned status.

Constraints

1 ≤ q ≤ 1000

-10000 ≤ xi, yi ≤ 10000

p0 and p1 are not identical.

Sample Input 1

0 0 2 0
2
-1 1
-1 -1

Sample Output 1

COUNTER_CLOCKWISE
CLOCKWISE

Sample Input 2

0 0 2 0
3
-1 0
0 0
3 0

Sample Output 2

ONLINE_BACK
ON_SEGMENT
ONLINE_FRONT

Solution in JAVA (judge verdict: Accepted)

import java.util.*;
public class Main{
	public static String clockwise(Vector v1, Vector v2){
		long cross = v1.x * v2.y - v1.y * v2.x;
		long value = v1.x * v2.x + v1.y * v2.y;
		long len1 = v1.x * v1.x + v1.y * v1.y;
		long len2 = v2.x * v2.x + v2.y * v2.y;
		if(cross == 0L){
			if(value < 0L)
				return "ONLINE_BACK";
			else if(len1 < len2)
				return "ONLINE_FRONT";
			else
				return "ON_SEGMENT";
		}
		else if(cross > 0L){
			return "COUNTER_CLOCKWISE";
		}
		else{
			return "CLOCKWISE";
		}
	}
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		Point p0 = new Point(sc.nextLong(),sc.nextLong());
		Point p1 = new Point(sc.nextLong(),sc.nextLong());
		Vector v1 = new Vector(p0,p1);
		int q = sc.nextInt();
		for(int i = 0 ; i < q ; i++){
			Point p2 = new Point(sc.nextLong(),sc.nextLong());
			Vector v2 = new Vector(p0,p2);
			System.out.println(clockwise(v1,v2));
		}
	}
}
class Point{
    long x;
    long y;
    Point(long x, long y){
        this.x = x;
        this.y = y;
    }
}
class Vector{
        long x;
	long y;
	Vector(Point ps, Point pg){
		x = pg.x - ps.x;
		y = pg.y - ps.y;
	}
}