<image>

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).

Constraints

* 1 ≤ q ≤ 1000
* -10000 ≤ xi, yi ≤ 10000
* p0 and p1 are not identical.

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.

Examples

Input

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


Output

COUNTER_CLOCKWISE
CLOCKWISE


Input

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


Output

ONLINE_BACK
ON_SEGMENT
ONLINE_FRONT
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pairInt;
#define FOR(i, n) for (int i = 0; i < int(n); i++)
#define FOR1(i, m, n) for (int i = int(m); i < int(n); i++)
#define MAX(a, b) ((a) >= (b) ? (a) : (b))
#define MIN(a, b) ((a) <= (b) ? (a) : (b))

int main(int argc, char *argv[]) {
  array<int, 2> p0, p1, v1;
  int q;

  scanf("%d%d%d%d%d", &p0[0], &p0[1], &p1[0], &p1[1], &q);
  v1[0] = p1[0] - p0[0];
  v1[1] = p1[1] - p0[1];

  FOR(i, q) {
    array<int, 2> p2, v2;
    scanf("%d%d", &p2[0], &p2[1]);
    v2[0] = p2[0] - p0[0];
    v2[1] = p2[1] - p0[1];

    int op = v1[0] * v2[1] - v1[1] * v2[0];
    int ip = v1[0] * v2[0] + v1[1] * v2[1];

#ifdef DEBUG
    printf("v1=(%d,%d),v2=(%d,%d),op=%d,ip=%d\n", v1[0], v1[1], v2[0], v2[1],
           op, ip);
#endif

    if (op > 0)
      printf("COUNTER_CLOCKWISE\n");
    else if (op < 0)
      printf("CLOCKWISE\n");
    else if (ip < 0)
      printf("ONLINE_BACK\n");
    else if (abs(v2[0]) > abs(v1[0]) || abs(v2[1]) > abs(v1[1]))
      printf("ONLINE_FRONT\n");
    else
      printf("ON_SEGMENT\n");
  }
  return 0;
}