<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 <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <cmath>
#include <string>
#include <sstream>
#include <iomanip>
#include <complex>
using namespace std;

#define ll long long
#define vvi vector< vector<int> >
#define All(X) X.begin(),X.end()
#define FOR(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define REP(i,n) for(int i=0;i<(int)(n);i++)
typedef long double ld;
typedef complex<ld> Point;
const ld eps = 1e-10, pi = acos(-1.0);

bool eq(ld a,ld b) {
  return (abs(a - b) < eps);
}
 // 内積
 ld dot(Point a, Point b) {
 return real(conj(a) * b);
 }
 // 外積
 ld cross(Point a, Point b) {
 return imag(conj(a) * b);
 }

int ccw (Point a, Point b, Point c){
  b-=a; c-=a;
  if (cross(b, c) > eps) return 0; // a,b,cが反時計周り
  if (cross(b, c) < -eps) return 1; // a,b,cが時計周り
  if (dot(b, c) < 0) return 2; // c,a,b順でon line
  if (norm(b) < norm(c)) return 3; // a,b,c順にon line
  return 4; // a,c,b順にon line
}


int main(){
  Point a,b,c;
  ld tmp[4];
  REP(i,4) cin >> tmp[i];
  a = Point(tmp[0],tmp[1]);
  b = Point(tmp[2],tmp[3]);
  int q;
  cin >> q;
  string rs[5]={"COUNTER_CLOCKWISE","CLOCKWISE","ONLINE_BACK","ONLINE_FRONT","ON_SEGMENT"};
  REP(i,q){
    cin >> tmp[0] >> tmp[1];
    c = Point(tmp[0],tmp[1]);
    cout << rs[ccw(a,b,c)] << endl;
  }
  return 0;
}