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;
}
}