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 Python3 (judge verdict: Accepted)

#!/usr/bin/env python3
# CGL_1_C: Points/Vectors - Counter-Clockwise

from enum import Enum
from math import sqrt


class Position(Enum):
    COUNTER_CLOCKWISE = 0
    CLOCKWISE = 1
    ONLINE_BACK = 2
    ONLINE_FRONT = 3
    ON_SEGMENT = 4


def dot(v1, v2):
    x1, y1 = v1
    x2, y2 = v2
    return x1 * x2 + y1 * y2


def length(v):
    x, y = v
    return sqrt(x**2 + y**2)


def orthogonal(v):
    x, y = v
    return -y, x


def ccw(v1, v2):
    d1 = dot(v1, v2)
    d2 = dot(orthogonal(v1), v2)

    if d2 > 0:
        return Position.COUNTER_CLOCKWISE
    elif d2 < 0:
        return Position.CLOCKWISE
    elif d1 < 0:
        return Position.ONLINE_BACK
    else:
        if length(v1) >= length(v2):
            return Position.ON_SEGMENT
        else:
            return Position.ONLINE_FRONT


def run():
    x0, y0, x1, y1 = [int(i) for i in input().split()]
    q = int(input())

    for _ in range(q):
        x2, y2 = [int(i) for i in input().split()]
        pos = ccw((x1-x0, y1-y0), (x2-x0, y2-y0))
        print(pos.name)


if __name__ == '__main__':
    run()