#pragma warning(disable: 4996)

#include <cstdio>
#include <algorithm>
#include <math.h>
#define N 110

using std::pair;

pair<int, int> ants[N], trees[N];
double dist[N][N];
int matches[N];

void collision(int i, int j) {
	printf("0\n");
}

int main(int argc, char *argv[]) {
	FILE *fin = fopen(argv[1], "r");
	FILE *fout = fopen(argv[2], "r");
	
	int n;
	fscanf(fin, "%d", &n);
	for (int i=0; i<n; i++) fscanf(fin, "%d %d", &ants[i].first, &ants[i].second);
	for (int i=0; i<n; i++) fscanf(fin, "%d %d", &trees[i].first, &trees[i].second);

	
	for (int i=0; i<n; i++)
		for(int j=0; j<n; j++)
			dist[i][j] = sqrt((ants[i].first - trees[j].first) * (ants[i].first - trees[j].first)
				+ (ants[i].second - trees[j].second) * (ants[i].second - trees[j].second));
	
	for (int i=0; i<n; i++) {
		fscanf(fout, "%d", &matches[i]);
		matches[i] -= 1;
	}
	
	for (int i=0; i<n; i++) {
		pair<int, int> p1 = ants[i], p2=trees[matches[i]];

		for (int j=0; j<n; j++) {
			pair<int, int> q1=ants[j], q2=trees[matches[j]];

			if (p1.first == p2.first) {
				if (q1.first == q2.first) {
					// Type A
					continue;
				} else {
					// Type B
					continue;
				}
			} else {
				double a = (double)(p1.second - p2.second) / (p1.first - p2.first);
				double b = p1.second  - p1.first * (double)(p1.second - p2.second) / (p1.first - p2.first);

				if (q1.first == q2.first) {
					// Type B
					double cross_y = a * q1.first + b;

					if (((p1.second <= cross_y && cross_y <= p2.second) || (p2.second <= cross_y && cross_y <= p1.second))
						&& ((q1.second <= cross_y && cross_y <= q2.second) || (q2.second <= cross_y && cross_y <= q1.second))) {
							collision(i, j);
							return 0;
					}
				} else {
					double c = (double)(q1.second - q2.second) / (q1.first - q2.first);
					double d = q1.second  - q1.first * (double)(q1.second - q2.second) / (q1.first - q2.first);
					
					if (a - c == 0) {
						continue;
					}

					double cross_x = - (b - d) / (a - c);

					if (((p1.first <= cross_x && cross_x <= p2.first) || (p2.first <= cross_x && cross_x <= p1.first))
						&& ((q1.first <= cross_x && cross_x <= q2.first) || (q2.first <= cross_x && cross_x <= q1.first))) {
							collision(i, j);
							return 0;
					}
				}
			}
		}
	}

	printf("1\n");

	return 0;
}
