import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);

		int N;
		N = in.nextInt();
		in.nextLine();

		List<String> id = new ArrayList<>();
//		String[] id = new String[N];
		List<Double[]> x_t = new ArrayList<>();
		List<Double> y_t = new ArrayList<>();
//		Double[][] x = new Double[N][5];
//		Double[] y = new Double[N];

		for (int i = 0; i < N; i ++ ) {
			String[] list = in.nextLine().split(",");

			if (!list[list.length - 1].equals("0") && !list[list.length - 1].equals("1") ) continue;

			id.add(list[0]);

			Double[] xx = new Double[5];
			for (int j = 1, k = 0; j < 6; j ++, k ++ ) {
				if (!list[j].equals("NaN")) {
					xx[k] = Double.parseDouble(list[j]);
				} else {
					xx[k] = -1e9;
				}
			}

			x_t.add(xx);
			y_t.add(Double.parseDouble(list[6]));
		}

		Double[][] x = x_t.toArray(new Double[y_t.size()][5]);
		Double[] y = y_t.toArray(new Double[y_t.size()]);

		for (int i = 0; i < 5; i ++ ) {
			check(x, i, N);
		}

		int epoch = 100;
		double alpha = 0.01;
		Double[] theta = new Double[5];
		Double w0 = (double) 0;

		Arrays.fill(theta, 0.0);

		for (int e = 0; e < epoch; e ++ ) {
			int m = y.length;
			double[] delta_theta = new double[5];
			double delta_w0 = 0;

			for (int i = 0; i < m; i ++ ) {
				for (int j = 0; j < 5; j ++ ) {
					delta_theta[j] += (forward(x[i], theta, w0) - y[i]) * x[i][j];
				}
				delta_w0 += (forward(x[i], theta, w0) - y[i]);
			}

			for (int i = 0; i < 5; i ++ ) {
				delta_theta[i] = delta_theta[i] / m;
				theta[i] -= alpha * delta_theta[i];
			}

			delta_w0 = delta_w0 / m;
			w0 -= alpha * delta_w0;
		}

		int M;
		M = in.nextInt();
		in.nextLine();

		for (int i = 0; i < M; i ++ ) {
			String[] list = in.nextLine().split(",");

			Double[] xxx = new Double[5];

			for (int j = 1, k = 0; j < 6; j ++, k ++ ) {
				xxx[k] = Double.parseDouble(list[j]);
			}

			Double predict = forward(xxx, theta, w0);
			if (predict >= 0.5) {
				System.out.println("1");
			} else {
				System.out.println("0");
			}
		}
		return ;
	}

	public static Double linear(Double[] x, Double[] y, Double w0) {
		Double sum = w0;
		for (int i = 0; i < y.length; i ++ ) sum += x[i] * y[i];
		return sum;
	}

	public static Double sigmoid(Double z) {
		return 1 / (1 + Math.exp(-z));
	}

	public static Double forward(Double[] x, Double[] y, Double w0) {
		Double t = linear(x, y, w0);
		return sigmoid(t);
	}

	public static void check(Double[][] x, int col, int N) {
		List<Double> list = new ArrayList<>();
		for (int i = 0; i < N; i ++ ) {
			if (x[i][col] == -1e9) continue;

			if (col == 0 || col == 1) {
				if (x[i][col] < 0) continue;
			}

			if (col == 2 || col == 3) {
				if (x[i][col] < 0 || x[i][col] > 1000) continue;
			}

			if (col == 4) {
				if (x[i][col] < 0 || x[i][col] > 20) continue;
			}

			list.add(x[i][col]);
		}

		Double avg = 0.0, mid = 0.0;
		if (list.size() != 0) {
			avg = Avg(list);
			mid = Mid(list);
		}

		if (list.size() != N) {
			for (int i = 0; i < N; i ++ ) {
				if (x[i][col] == -1e9) x[i][col] = avg;

				if (col == 0 || col == 1) {
					if (x[i][col] < 0) x[i][col] = mid;
				}

				if (col == 2 || col == 3) {
					if (x[i][col] < 0 || x[i][col] > 1000) x[i][col] = mid;
				}

				if (col == 4) {
					if (x[i][col] < 0 || x[i][col] > 20) x[i][col] = mid;
				}
			}
		}
	}

	public static Double Avg(List<Double> list) {
		Double sum = 0.0;
		for (Double num : list) {
			sum += num;
		}
		return sum / list.size();
	}

	public static Double Mid(List<Double> list) {
		int len = list.size();
		if (len % 2 == 0) {
			return list.get(len / 2);
		}
		return (list.get(len/2) + list.get(len/2 - 1)) / 2.0;

	}
}