#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;


#define EPS (1e-10)
#define equals( A, B ) (fabs((A) - (B)) < EPS)

class Point {
public:
    double x, y;
    Point( double x = 0, double y = 0 ): x(x), y(y) {}
    
    Point operator + ( Point p ) { return Point( x + p.x, y + p.y ); }
    Point operator - ( Point p ) { return Point( x - p.x, y - p.y ); }
    Point operator * ( double a ) { return Point( a * x, a * y ); }
    Point operator / ( double a ) { return Point( x / a, y / a ); }

    double abs() { return sqrt( norm() ); }
    double norm() { return x * x + y * y; }

    bool operator < ( const Point &p ) const {
	return ( x != p.x ) ? x < p.x : y < p.y;
    }

    bool operator == ( const Point &p ) const {
	return equals( x, p.x ) && equals( y, p.y ); 
    }

    double dot( Point a ) { return x * a.x + y * a.y; }
    double cross( Point a ) { return x * a.y - y * a.x; }
    double distance( Point a ) {
	return (*this - a).abs();
    }
};

typedef Point Vector;

static const int COUNTER_CLOCKWISE = 1;
static const int CLOCKWISE = -1;
static const int ONLINE_BACK = 2;
static const int ONLINE_FRONT = -2;
static const int ON_SEGMENT = 0;

class Line {
public:
    Point p1, p2;
    Line( Point p1 = Point(), Point p2 = Point() ): p1(p1), p2(p2){}
    // ?????´????????????( cos = 0 )
    bool isOrthogonal( Line a ) {
	return equals( 0.0, (p1 - p2).dot( a.p1 - a.p2 ) );
    }
    // ??????????????????( sin = 0 )
    bool isParallel( Line a ) {
	return equals( 0.0, (p1 - p2).cross( a.p1 - a.p2 ) );
    }

    Point projection( Point p ) {
	Vector v12 = p2 - p1;
	double r = v12.dot( p - p1 ) / v12.norm();
	return p1 + v12 * r;
    }

    Point reflection( Point p ) {
	return p + ( projection( p ) - p ) * 2.0;
    }

    double distance( Point p ) {
	Vector v12 = this->p2 -this->p1;
	Vector v10 = p - this->p1;
	
	return v12.cross( v12 ) / v12.abs();
    }

    double distanceSP( Point p ) {
	if ( (p - this->p1).dot( this->p2 - this->p1 ) < 0.0 ) {
	    return this->p1.distance( p );
	} else if ( (p - this->p2).dot( this->p1 - this->p2 ) < 0.0 ) {
	    return this->p2.distance( p );
	}
	else {
	    return distance( p );
	}
    }

    bool intersect( Line l ) {
	return false;
    }

    int ccw( Point p ) {
	Vector a = p2 - p1;
	Vector b = p - p1;
	
	if ( a.cross( b ) > EPS ) return COUNTER_CLOCKWISE;
	else if ( a.cross( b ) < -EPS ) return CLOCKWISE;
	else if ( a.dot( b ) < -EPS ) return ONLINE_BACK;
	else if ( a.norm() < b.norm() ) return ONLINE_FRONT;
	else return ON_SEGMENT;
    }
};

typedef Line Segment;


int main()
{
    Point p0, p1;
    int q;

    scanf("%lf %lf %lf %lf", &p0.x, &p0.y, &p1.x, &p1.y);

    Segment s = Segment( p0, p1 );

    scanf("%d", &q);


    for ( int i = 0; i < q; i++ ) {
	Point p;
	scanf("%lf %lf", &p.x, &p.y);
	int pos = s.ccw( p );
	switch ( pos ) {
	case COUNTER_CLOCKWISE:
	    printf("COUNTER_CLOCKWISE\n");
	    break;
	case CLOCKWISE:
	    printf("CLOCKWISE\n");
	    break;
	case ONLINE_BACK:
	    printf("ONLINE_BACK\n");
	    break;
	case ONLINE_FRONT:
	    printf("ONLINE_FRONT\n");
	    break;
	case ON_SEGMENT:
	    printf("ON_SEGMENT\n");
	    break;
	}
    }

    return 0;
}

Measured memory_bytes: 1048