<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<cstdio>
#include<cstring>
#include<cmath>
#define eps 1e-9
#define double long long
using namespace std;
struct point{
	double x,y;
	void read(){scanf("%lld%lld",&x,&y);}
	void write(){printf("%.9f %.9f\n",x,y);}
	point(double X=0.0,double Y=0.0):x(X),y(Y){}
	point operator +(const point a)const{return point(x+a.x,y+a.y);}
	point operator -(const point a)const{return point(x-a.x,y-a.y);}
	point operator *(double a)const{return point(x*a,y*a);}
	point operator /(double a)const{return point(x/a,y/a);} 
};
double dis(point a){return a.x*a.x+a.y*a.y;}
double dot(point a,point b){return a.x*b.x+a.y*b.y;}
double cross(point a,point b){return a.x*b.y-a.y*b.x;}
short int on_left(point o,point a,point b)//oa->ob 0:L 1:R 2:D 3:U 4:O
{
	if(cross(a-o,b-o)) return cross(a-o,b-o)<0;
	if(dot(a-o,b-o)<0) return 2;
	return 3+(dis(a-o)>=dis(b-o));
}
point p1,p2;
const char s[5][30]={"COUNTER_CLOCKWISE","CLOCKWISE","ONLINE_BACK","ONLINE_FRONT","ON_SEGMENT"};
int main()
{
	int n;
	p1.read();p2.read();
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		point p;
		p.read();
		puts(s[on_left(p1,p2,p)]);
	}
	return 0;
}

