├── part2 ├── backward.R ├── foward.R ├── backward.py ├── forward.py ├── data_r.csv └── data_python.csv ├── README.md ├── part3 ├── BaumWelch.R ├── BaumWelch.py ├── data_r.csv └── data_python.csv └── part4 ├── Viterbi.R ├── Viterbi.py ├── data_r.csv └── data_python.csv /part2/backward.R: -------------------------------------------------------------------------------- 1 | data = read.csv("data_r.csv") 2 | 3 | a = matrix(c(0.54, 0.49, 0.46, 0.51),nrow = 2,ncol = 2) 4 | b = matrix(c(0.16, 0.25, 0.26, 0.28, 0.58, 0.47),nrow = 2,ncol = 3) 5 | 6 | backward = function(V, A, B){ 7 | T = length(V) 8 | m = nrow(A) 9 | beta = matrix(1, T, m) 10 | 11 | for(t in (T-1):1){ 12 | tmp = as.matrix(beta[t+1, ] * B[, V[t+1]]) 13 | beta[t, ] = t(A %*% tmp) 14 | } 15 | return(beta) 16 | } 17 | 18 | backward(data$Visible,a,b) 19 | -------------------------------------------------------------------------------- /part2/foward.R: -------------------------------------------------------------------------------- 1 | 2 | 3 | data = read.csv("data_r.csv") 4 | 5 | a = matrix(c(0.54, 0.49, 0.46, 0.51),nrow = 2,ncol = 2) 6 | b = matrix(c(0.16, 0.25, 0.26, 0.28, 0.58, 0.47),nrow = 2,ncol = 3) 7 | initial_distribution = c(1/2, 1/2) 8 | 9 | forward = function(v, a, b, initial_distribution){ 10 | 11 | T = length(v) 12 | m = nrow(a) 13 | alpha = matrix(0, T, m) 14 | 15 | alpha[1, ] = initial_distribution*b[, v[1]] 16 | 17 | for(t in 2:T){ 18 | tmp = alpha[t-1, ] %*% a 19 | alpha[t, ] = tmp * b[, v[t]] 20 | } 21 | return(alpha) 22 | } 23 | 24 | forward(data$Visible,a,b,initial_distribution) 25 | 26 | 27 | -------------------------------------------------------------------------------- /part2/backward.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | 4 | data = pd.read_csv('data_python.csv') 5 | 6 | V = data['Visible'].values 7 | 8 | # Transition Probabilities 9 | a = np.array(((0.54, 0.46), (0.49, 0.51))) 10 | 11 | # Emission Probabilities 12 | b = np.array(((0.16, 0.26, 0.58), (0.25, 0.28, 0.47))) 13 | 14 | 15 | def backward(V, a, b): 16 | beta = np.zeros((V.shape[0], a.shape[0])) 17 | 18 | # setting beta(T) = 1 19 | beta[V.shape[0] - 1] = np.ones((a.shape[0])) 20 | 21 | # Loop in backward way from T-1 to 22 | # Due to python indexing the actual loop will be T-2 to 0 23 | for t in range(V.shape[0] - 2, -1, -1): 24 | for j in range(a.shape[0]): 25 | beta[t, j] = (beta[t + 1] * b[:, V[t + 1]]).dot(a[j, :]) 26 | 27 | return beta 28 | 29 | 30 | beta = backward(V, a, b) 31 | print(beta) 32 | -------------------------------------------------------------------------------- /part2/forward.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | 4 | data = pd.read_csv('data_python.csv') 5 | 6 | V = data['Visible'].values 7 | 8 | # Transition Probabilities 9 | a = np.array(((0.54, 0.46), (0.49, 0.51))) 10 | 11 | # Emission Probabilities 12 | b = np.array(((0.16, 0.26, 0.58), (0.25, 0.28, 0.47))) 13 | 14 | # Equal Probabilities for the initial distribution 15 | initial_distribution = np.array((0.5, 0.5)) 16 | 17 | 18 | def forward(V, a, b, initial_distribution): 19 | alpha = np.zeros((V.shape[0], a.shape[0])) 20 | alpha[0, :] = initial_distribution * b[:, V[0]] 21 | 22 | for t in range(1, V.shape[0]): 23 | for j in range(a.shape[0]): 24 | # Matrix Computation Steps 25 | # ((1x2) . (1x2)) * (1) 26 | # (1) * (1) 27 | alpha[t, j] = alpha[t - 1].dot(a[:, j]) * b[j, V[t]] 28 | 29 | return alpha 30 | 31 | 32 | alpha = forward(V, a, b, initial_distribution) 33 | print(alpha) 34 | 35 | 36 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HiddenMarkovModel 2 | 3 | This is the code base of the following articles. Please visit the website for the detail explanation of the code. 4 | 5 | ![alt text](https://adeveloperdiary.com/assets/img/Introduction-to-Hidden-Markov-Model-adeveloperdiary.com-7.jpg) 6 | 7 | https://adeveloperdiary.com/data-science/machine-learning/introduction-to-hidden-markov-model/ 8 | 9 | ![alt text](https://adeveloperdiary.com/assets/img/Forward-and-Backward-Algorithm-in-Hidden-Markov-Model-adeveloperdiary.com_-1.jpg) 10 | 11 | https://adeveloperdiary.com/data-science/machine-learning/forward-and-backward-algorithm-in-hidden-markov-model/ 12 | 13 | ![alt text](https://adeveloperdiary.com/assets/img/Implement-Viterbi-Algorithm-in-Hidden-Markov-Model-using-Python-and-R-adeveloperdiary.com-5.jpg) 14 | 15 | https://adeveloperdiary.com/data-science/machine-learning/derivation-and-implementation-of-baum-welch-algorithm-for-hidden-markov-model/ 16 | 17 | ![alt text](https://adeveloperdiary.com/assets/img/Implement-Viterbi-Algorithm-in-Hidden-Markov-Model-using-Python-and-R-adeveloperdiary.com-5.jpg) 18 | 19 | https://adeveloperdiary.com/data-science/machine-learning/implement-viterbi-algorithm-in-hidden-markov-model-using-python-and-r/ 20 | -------------------------------------------------------------------------------- /part3/BaumWelch.R: -------------------------------------------------------------------------------- 1 | forward = function(v, a, b, initial_distribution){ 2 | 3 | T = length(v) 4 | M = nrow(a) 5 | alpha = matrix(0, T, M) 6 | 7 | alpha[1, ] = initial_distribution*b[, v[1]] 8 | 9 | for(t in 2:T){ 10 | tmp = alpha[t-1, ] %*% a 11 | alpha[t, ] = tmp * b[, v[t]] 12 | } 13 | return(alpha) 14 | } 15 | 16 | backward = function(v, a, b){ 17 | T = length(v) 18 | M = nrow(a) 19 | beta = matrix(1, T, M) 20 | 21 | for(t in (T-1):1){ 22 | tmp = as.matrix(beta[t+1, ] * b[, v[t+1]]) 23 | beta[t, ] = t(a %*% tmp) 24 | } 25 | return(beta) 26 | } 27 | 28 | 29 | BaumWelch = function(v, a, b, initial_distribution, n.iter = 100){ 30 | 31 | for(i in 1:n.iter){ 32 | T = length(v) 33 | M = nrow(a) 34 | K=ncol(b) 35 | alpha = forward(v, a, b, initial_distribution) 36 | beta = backward(v, a, b) 37 | xi = array(0, dim=c(M, M, T-1)) 38 | 39 | for(t in 1:T-1){ 40 | denominator = ((alpha[t,] %*% a) * b[,v[t+1]]) %*% matrix(beta[t+1,]) 41 | for(s in 1:M){ 42 | numerator = alpha[t,s] * a[s,] * b[,v[t+1]] * beta[t+1,] 43 | xi[s,,t]=numerator/as.vector(denominator) 44 | } 45 | } 46 | 47 | 48 | xi.all.t = rowSums(xi, dims = 2) 49 | a = xi.all.t/rowSums(xi.all.t) 50 | 51 | gamma = apply(xi, c(1, 3), sum) 52 | gamma = cbind(gamma, colSums(xi[, , T-1])) 53 | for(l in 1:K){ 54 | b[, l] = rowSums(gamma[, which(v==l)]) 55 | } 56 | b = b/rowSums(b) 57 | 58 | } 59 | return(list(a = a, b = b, initial_distribution = initial_distribution)) 60 | } 61 | 62 | data = read.csv("data_r.csv") 63 | 64 | M=2; K=3 65 | A = matrix(1, M, M) 66 | A = A/rowSums(A) 67 | B = matrix(1:6, M, K) 68 | B = B/rowSums(B) 69 | initial_distribution = c(1/2, 1/2) 70 | 71 | (myout = BaumWelch(data$Visible, A, B, initial_distribution, n.iter = 1)) 72 | 73 | library(HMM) 74 | hmm =initHMM(c("A", "B"), c(1, 2, 3), 75 | startProbs = initial_distribution, 76 | transProbs = A, emissionProbs = B) 77 | 78 | true.out = baumWelch(hmm, data$Visible, maxIterations=100, pseudoCount=0) 79 | true.out$hmm -------------------------------------------------------------------------------- /part3/BaumWelch.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | 4 | 5 | def forward(V, a, b, initial_distribution): 6 | alpha = np.zeros((V.shape[0], a.shape[0])) 7 | alpha[0, :] = initial_distribution * b[:, V[0]] 8 | 9 | for t in range(1, V.shape[0]): 10 | for j in range(a.shape[0]): 11 | # Matrix Computation Steps 12 | # ((1x2) . (1x2)) * (1) 13 | # (1) * (1) 14 | alpha[t, j] = alpha[t - 1].dot(a[:, j]) * b[j, V[t]] 15 | 16 | return alpha 17 | 18 | 19 | def backward(V, a, b): 20 | beta = np.zeros((V.shape[0], a.shape[0])) 21 | 22 | # setting beta(T) = 1 23 | beta[V.shape[0] - 1] = np.ones((a.shape[0])) 24 | 25 | # Loop in backward way from T-1 to 26 | # Due to python indexing the actual loop will be T-2 to 0 27 | for t in range(V.shape[0] - 2, -1, -1): 28 | for j in range(a.shape[0]): 29 | beta[t, j] = (beta[t + 1] * b[:, V[t + 1]]).dot(a[j, :]) 30 | 31 | return beta 32 | 33 | 34 | def baum_welch(V, a, b, initial_distribution, n_iter=100): 35 | M = a.shape[0] 36 | T = len(V) 37 | 38 | for n in range(n_iter): 39 | alpha = forward(V, a, b, initial_distribution) 40 | beta = backward(V, a, b) 41 | 42 | xi = np.zeros((M, M, T - 1)) 43 | for t in range(T - 1): 44 | denominator = np.dot(np.dot(alpha[t, :].T, a) * b[:, V[t + 1]].T, beta[t + 1, :]) 45 | for i in range(M): 46 | numerator = alpha[t, i] * a[i, :] * b[:, V[t + 1]].T * beta[t + 1, :].T 47 | xi[i, :, t] = numerator / denominator 48 | 49 | gamma = np.sum(xi, axis=1) 50 | a = np.sum(xi, 2) / np.sum(gamma, axis=1).reshape((-1, 1)) 51 | 52 | # Add additional T'th element in gamma 53 | gamma = np.hstack((gamma, np.sum(xi[:, :, T - 2], axis=0).reshape((-1, 1)))) 54 | 55 | K = b.shape[1] 56 | denominator = np.sum(gamma, axis=1) 57 | for l in range(K): 58 | b[:, l] = np.sum(gamma[:, V == l], axis=1) 59 | 60 | b = np.divide(b, denominator.reshape((-1, 1))) 61 | 62 | return {"a":a, "b":b} 63 | 64 | 65 | data = pd.read_csv('data_python.csv') 66 | 67 | V = data['Visible'].values 68 | 69 | # Transition Probabilities 70 | a = np.ones((2, 2)) 71 | a = a / np.sum(a, axis=1) 72 | 73 | # Emission Probabilities 74 | b = np.array(((1, 3, 5), (2, 4, 6))) 75 | b = b / np.sum(b, axis=1).reshape((-1, 1)) 76 | 77 | # Equal Probabilities for the initial distribution 78 | initial_distribution = np.array((0.5, 0.5)) 79 | 80 | print(baum_welch(V, a, b, initial_distribution, n_iter=100)) 81 | -------------------------------------------------------------------------------- /part4/Viterbi.R: -------------------------------------------------------------------------------- 1 | forward = function(v, a, b, initial_distribution){ 2 | 3 | T = length(v) 4 | M = nrow(a) 5 | alpha = matrix(0, T, M) 6 | 7 | alpha[1, ] = initial_distribution*b[, v[1]] 8 | 9 | for(t in 2:T){ 10 | tmp = alpha[t-1, ] %*% a 11 | alpha[t, ] = tmp * b[, v[t]] 12 | } 13 | return(alpha) 14 | } 15 | 16 | backward = function(v, a, b){ 17 | T = length(v) 18 | M = nrow(a) 19 | beta = matrix(1, T, M) 20 | 21 | for(t in (T-1):1){ 22 | tmp = as.matrix(beta[t+1, ] * b[, v[t+1]]) 23 | beta[t, ] = t(a %*% tmp) 24 | } 25 | return(beta) 26 | } 27 | 28 | 29 | BaumWelch = function(v, a, b, initial_distribution, n.iter = 100){ 30 | 31 | for(i in 1:n.iter){ 32 | T = length(v) 33 | M = nrow(a) 34 | K=ncol(b) 35 | alpha = forward(v, a, b, initial_distribution) 36 | beta = backward(v, a, b) 37 | xi = array(0, dim=c(M, M, T-1)) 38 | 39 | for(t in 1:T-1){ 40 | denominator = ((alpha[t,] %*% a) * b[,v[t+1]]) %*% matrix(beta[t+1,]) 41 | for(s in 1:M){ 42 | numerator = alpha[t,s] * a[s,] * b[,v[t+1]] * beta[t+1,] 43 | xi[s,,t]=numerator/as.vector(denominator) 44 | } 45 | } 46 | 47 | 48 | xi.all.t = rowSums(xi, dims = 2) 49 | a = xi.all.t/rowSums(xi.all.t) 50 | 51 | gamma = apply(xi, c(1, 3), sum) 52 | gamma = cbind(gamma, colSums(xi[, , T-1])) 53 | for(l in 1:K){ 54 | b[, l] = rowSums(gamma[, which(v==l)]) 55 | } 56 | b = b/rowSums(b) 57 | 58 | } 59 | return(list(a = a, b = b, initial_distribution = initial_distribution)) 60 | } 61 | 62 | 63 | Viterbi=function(v,a,b,initial_distribution) { 64 | 65 | T = length(v) 66 | M = nrow(a) 67 | prev = matrix(0, T-1, M) 68 | omega = matrix(0, M, T) 69 | 70 | omega[, 1] = log(initial_distribution * b[, v[1]]) 71 | for(t in 2:T){ 72 | for(s in 1:M) { 73 | probs = omega[, t - 1] + log(a[, s]) + log(b[s, v[t]]) 74 | prev[t - 1, s] = which.max(probs) 75 | omega[s, t] = max(probs) 76 | } 77 | } 78 | 79 | S = rep(0, T) 80 | last_state=which.max(omega[,ncol(omega)]) 81 | S[1]=last_state 82 | 83 | j=2 84 | for(i in (T-1):1){ 85 | S[j]=prev[i,last_state] 86 | last_state=prev[i,last_state] 87 | j=j+1 88 | } 89 | 90 | S[which(S==1)]='A' 91 | S[which(S==2)]='B' 92 | 93 | S=rev(S) 94 | 95 | return(S) 96 | 97 | } 98 | 99 | data = read.csv("data_r.csv") 100 | 101 | M=2; K=3 102 | A = matrix(1, M, M) 103 | A = A/rowSums(A) 104 | B = matrix(1:6, M, K) 105 | B = B/rowSums(B) 106 | initial_distribution = c(1/2, 1/2) 107 | 108 | myout = BaumWelch(data$Visible, A, B, initial_distribution, n.iter = 100) 109 | myout.hidden=Viterbi(data$Visible,myout$a,myout$b,initial_distribution) 110 | 111 | library(HMM) 112 | hmm =initHMM(c("A", "B"), c(1, 2, 3), 113 | startProbs = initial_distribution, 114 | transProbs = A, emissionProbs = B) 115 | 116 | true.out = baumWelch(hmm, data$Visible, maxIterations=100, pseudoCount=0) 117 | 118 | true.viterbi = viterbi(true.out$hmm, data$Visible) 119 | sum(true.viterbi != myout.hidden) 120 | 121 | -------------------------------------------------------------------------------- /part4/Viterbi.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import numpy as np 3 | 4 | 5 | def forward(V, a, b, initial_distribution): 6 | alpha = np.zeros((V.shape[0], a.shape[0])) 7 | alpha[0, :] = initial_distribution * b[:, V[0]] 8 | 9 | for t in range(1, V.shape[0]): 10 | for j in range(a.shape[0]): 11 | # Matrix Computation Steps 12 | # ((1x2) . (1x2)) * (1) 13 | # (1) * (1) 14 | alpha[t, j] = alpha[t - 1].dot(a[:, j]) * b[j, V[t]] 15 | 16 | return alpha 17 | 18 | 19 | def backward(V, a, b): 20 | beta = np.zeros((V.shape[0], a.shape[0])) 21 | 22 | # setting beta(T) = 1 23 | beta[V.shape[0] - 1] = np.ones((a.shape[0])) 24 | 25 | # Loop in backward way from T-1 to 26 | # Due to python indexing the actual loop will be T-2 to 0 27 | for t in range(V.shape[0] - 2, -1, -1): 28 | for j in range(a.shape[0]): 29 | beta[t, j] = (beta[t + 1] * b[:, V[t + 1]]).dot(a[j, :]) 30 | 31 | return beta 32 | 33 | 34 | def baum_welch(V, a, b, initial_distribution, n_iter=100): 35 | M = a.shape[0] 36 | T = len(V) 37 | 38 | for n in range(n_iter): 39 | alpha = forward(V, a, b, initial_distribution) 40 | beta = backward(V, a, b) 41 | 42 | xi = np.zeros((M, M, T - 1)) 43 | for t in range(T - 1): 44 | denominator = np.dot(np.dot(alpha[t, :].T, a) * b[:, V[t + 1]].T, beta[t + 1, :]) 45 | for i in range(M): 46 | numerator = alpha[t, i] * a[i, :] * b[:, V[t + 1]].T * beta[t + 1, :].T 47 | xi[i, :, t] = numerator / denominator 48 | 49 | gamma = np.sum(xi, axis=1) 50 | a = np.sum(xi, 2) / np.sum(gamma, axis=1).reshape((-1, 1)) 51 | 52 | # Add additional T'th element in gamma 53 | gamma = np.hstack((gamma, np.sum(xi[:, :, T - 2], axis=0).reshape((-1, 1)))) 54 | 55 | K = b.shape[1] 56 | denominator = np.sum(gamma, axis=1) 57 | for l in range(K): 58 | b[:, l] = np.sum(gamma[:, V == l], axis=1) 59 | 60 | b = np.divide(b, denominator.reshape((-1, 1))) 61 | 62 | return (a, b) 63 | 64 | 65 | def viterbi(V, a, b, initial_distribution): 66 | T = V.shape[0] 67 | M = a.shape[0] 68 | 69 | omega = np.zeros((T, M)) 70 | omega[0, :] = np.log(initial_distribution * b[:, V[0]]) 71 | 72 | prev = np.zeros((T - 1, M)) 73 | 74 | for t in range(1, T): 75 | for j in range(M): 76 | # Same as Forward Probability 77 | probability = omega[t - 1] + np.log(a[:, j]) + np.log(b[j, V[t]]) 78 | 79 | # This is our most probable state given previous state at time t (1) 80 | prev[t - 1, j] = np.argmax(probability) 81 | 82 | # This is the probability of the most probable state (2) 83 | omega[t, j] = np.max(probability) 84 | 85 | # Path Array 86 | S = np.zeros(T) 87 | 88 | # Find the most probable last hidden state 89 | last_state = np.argmax(omega[T - 1, :]) 90 | 91 | S[0] = last_state 92 | 93 | backtrack_index = 1 94 | for i in range(T - 2, -1, -1): 95 | S[backtrack_index] = prev[i, int(last_state)] 96 | last_state = prev[i, int(last_state)] 97 | backtrack_index += 1 98 | 99 | # Flip the path array since we were backtracking 100 | S = np.flip(S, axis=0) 101 | 102 | # Convert numeric values to actual hidden states 103 | result = [] 104 | for s in S: 105 | if s == 0: 106 | result.append("A") 107 | else: 108 | result.append("B") 109 | 110 | return result 111 | 112 | 113 | data = pd.read_csv('data_python.csv') 114 | 115 | V = data['Visible'].values 116 | 117 | # Transition Probabilities 118 | a = np.ones((2, 2)) 119 | a = a / np.sum(a, axis=1) 120 | 121 | # Emission Probabilities 122 | b = np.array(((1, 3, 5), (2, 4, 6))) 123 | b = b / np.sum(b, axis=1).reshape((-1, 1)) 124 | 125 | # Equal Probabilities for the initial distribution 126 | initial_distribution = np.array((0.5, 0.5)) 127 | 128 | a, b = baum_welch(V, a, b, initial_distribution, n_iter=100) 129 | 130 | print(viterbi(V, a, b, initial_distribution)) 131 | -------------------------------------------------------------------------------- /part2/data_r.csv: -------------------------------------------------------------------------------- 1 | "Hidden","Visible" 2 | "B",1 3 | "B",2 4 | "B",3 5 | "B",3 6 | "B",3 7 | "B",3 8 | "B",3 9 | "B",3 10 | "B",3 11 | "B",3 12 | "B",3 13 | "B",3 14 | "B",3 15 | "B",3 16 | "B",3 17 | "B",3 18 | "B",2 19 | "B",3 20 | "B",3 21 | "B",3 22 | "B",3 23 | "B",2 24 | "A",2 25 | "A",2 26 | "A",1 27 | "A",3 28 | "A",2 29 | "A",3 30 | "A",1 31 | "A",3 32 | "A",1 33 | "A",2 34 | "B",3 35 | "B",2 36 | "B",3 37 | "B",1 38 | "B",3 39 | "B",1 40 | "B",3 41 | "B",3 42 | "A",1 43 | "A",3 44 | "A",3 45 | "A",3 46 | "A",1 47 | "A",1 48 | "A",2 49 | "A",1 50 | "A",2 51 | "A",3 52 | "A",3 53 | "B",3 54 | "B",3 55 | "B",1 56 | "B",3 57 | "B",3 58 | "B",3 59 | "B",2 60 | "A",3 61 | "A",1 62 | "A",2 63 | "A",1 64 | "A",1 65 | "A",3 66 | "A",2 67 | "B",3 68 | "B",2 69 | "A",2 70 | "A",2 71 | "A",1 72 | "A",3 73 | "A",1 74 | "A",1 75 | "A",2 76 | "A",2 77 | "A",3 78 | "A",1 79 | "A",2 80 | "A",3 81 | "A",1 82 | "A",2 83 | "A",1 84 | "A",3 85 | "A",2 86 | "A",1 87 | "A",1 88 | "A",3 89 | "A",1 90 | "A",2 91 | "A",1 92 | "A",3 93 | "A",2 94 | "A",3 95 | "A",2 96 | "B",2 97 | "B",3 98 | "B",2 99 | "B",3 100 | "B",3 101 | "B",3 102 | "B",2 103 | "A",3 104 | "A",2 105 | "A",3 106 | "A",2 107 | "A",2 108 | "A",2 109 | "A",3 110 | "B",3 111 | "B",2 112 | "B",3 113 | "B",3 114 | "B",2 115 | "B",3 116 | "B",3 117 | "B",3 118 | "B",3 119 | "B",3 120 | "B",3 121 | "A",3 122 | "A",1 123 | "A",1 124 | "A",1 125 | "A",2 126 | "A",2 127 | "A",2 128 | "A",3 129 | "A",2 130 | "A",1 131 | "A",2 132 | "A",1 133 | "A",2 134 | "A",1 135 | "A",2 136 | "A",3 137 | "A",1 138 | "A",3 139 | "A",3 140 | "A",2 141 | "A",1 142 | "A",1 143 | "A",2 144 | "A",2 145 | "A",3 146 | "A",3 147 | "A",1 148 | "A",3 149 | "A",1 150 | "A",1 151 | "B",1 152 | "B",3 153 | "B",3 154 | "B",3 155 | "B",3 156 | "A",3 157 | "A",2 158 | "A",3 159 | "A",3 160 | "B",3 161 | "B",3 162 | "B",3 163 | "B",2 164 | "B",3 165 | "B",2 166 | "B",3 167 | "B",2 168 | "B",3 169 | "B",1 170 | "B",3 171 | "B",3 172 | "B",3 173 | "B",3 174 | "B",3 175 | "B",3 176 | "B",3 177 | "B",3 178 | "B",1 179 | "B",3 180 | "B",2 181 | "B",3 182 | "B",2 183 | "B",2 184 | "B",2 185 | "B",3 186 | "B",3 187 | "B",3 188 | "B",3 189 | "B",3 190 | "B",3 191 | "B",3 192 | "B",1 193 | "B",3 194 | "B",3 195 | "B",3 196 | "B",3 197 | "B",3 198 | "B",2 199 | "B",3 200 | "B",2 201 | "B",3 202 | "B",2 203 | "B",3 204 | "A",1 205 | "A",3 206 | "A",1 207 | "A",2 208 | "A",3 209 | "A",1 210 | "A",2 211 | "A",1 212 | "A",2 213 | "B",2 214 | "B",3 215 | "B",3 216 | "B",3 217 | "B",3 218 | "B",3 219 | "A",3 220 | "A",3 221 | "A",3 222 | "A",3 223 | "A",2 224 | "A",1 225 | "A",1 226 | "A",2 227 | "A",3 228 | "A",2 229 | "A",1 230 | "A",3 231 | "A",3 232 | "A",2 233 | "A",3 234 | "A",3 235 | "A",3 236 | "A",2 237 | "A",1 238 | "A",2 239 | "A",3 240 | "A",3 241 | "A",3 242 | "A",2 243 | "A",1 244 | "B",2 245 | "B",1 246 | "B",3 247 | "B",3 248 | "B",2 249 | "B",3 250 | "B",3 251 | "B",3 252 | "A",2 253 | "A",3 254 | "A",3 255 | "B",3 256 | "B",3 257 | "B",1 258 | "B",3 259 | "B",1 260 | "B",2 261 | "B",2 262 | "B",3 263 | "B",1 264 | "B",1 265 | "B",3 266 | "A",3 267 | "A",3 268 | "A",2 269 | "A",2 270 | "A",1 271 | "A",1 272 | "A",2 273 | "A",3 274 | "A",2 275 | "A",3 276 | "A",2 277 | "B",1 278 | "B",3 279 | "B",1 280 | "B",3 281 | "B",3 282 | "A",1 283 | "A",1 284 | "A",1 285 | "A",2 286 | "A",1 287 | "A",2 288 | "A",2 289 | "A",2 290 | "A",3 291 | "A",3 292 | "A",1 293 | "A",2 294 | "A",3 295 | "A",3 296 | "A",3 297 | "A",1 298 | "A",2 299 | "A",2 300 | "B",3 301 | "B",3 302 | "B",1 303 | "B",2 304 | "B",3 305 | "B",3 306 | "B",3 307 | "B",3 308 | "B",3 309 | "B",3 310 | "B",1 311 | "B",2 312 | "B",3 313 | "B",3 314 | "B",1 315 | "B",3 316 | "B",1 317 | "B",3 318 | "B",3 319 | "B",3 320 | "B",2 321 | "B",3 322 | "B",3 323 | "B",3 324 | "A",2 325 | "A",2 326 | "A",2 327 | "A",2 328 | "A",3 329 | "A",1 330 | "A",1 331 | "A",1 332 | "A",3 333 | "A",3 334 | "A",2 335 | "A",2 336 | "A",3 337 | "A",2 338 | "A",1 339 | "A",3 340 | "A",2 341 | "A",2 342 | "A",2 343 | "A",1 344 | "A",2 345 | "A",3 346 | "A",2 347 | "A",3 348 | "A",2 349 | "A",3 350 | "A",3 351 | "A",3 352 | "A",1 353 | "A",3 354 | "A",1 355 | "A",1 356 | "B",3 357 | "B",3 358 | "B",3 359 | "B",3 360 | "B",3 361 | "B",3 362 | "B",2 363 | "B",1 364 | "A",2 365 | "B",2 366 | "B",2 367 | "B",3 368 | "B",2 369 | "B",3 370 | "B",3 371 | "B",3 372 | "B",3 373 | "B",3 374 | "B",2 375 | "B",2 376 | "B",3 377 | "B",3 378 | "B",3 379 | "B",3 380 | "B",3 381 | "B",3 382 | "B",1 383 | "B",2 384 | "B",3 385 | "A",1 386 | "A",2 387 | "B",3 388 | "B",2 389 | "B",3 390 | "B",1 391 | "B",3 392 | "B",2 393 | "B",1 394 | "B",3 395 | "B",3 396 | "B",1 397 | "B",3 398 | "B",3 399 | "B",1 400 | "B",3 401 | "B",3 402 | "B",3 403 | "B",3 404 | "B",1 405 | "B",3 406 | "B",3 407 | "B",3 408 | "B",2 409 | "B",3 410 | "B",1 411 | "B",3 412 | "B",2 413 | "B",3 414 | "B",3 415 | "B",3 416 | "B",2 417 | "B",3 418 | "B",3 419 | "B",3 420 | "B",1 421 | "B",1 422 | "B",3 423 | "B",2 424 | "B",3 425 | "B",3 426 | "B",3 427 | "B",3 428 | "B",3 429 | "B",3 430 | "B",3 431 | "B",2 432 | "B",3 433 | "B",3 434 | "B",3 435 | "B",1 436 | "B",3 437 | "B",3 438 | "B",2 439 | "B",3 440 | "B",3 441 | "B",3 442 | "B",3 443 | "B",2 444 | "B",3 445 | "B",1 446 | "B",3 447 | "A",2 448 | "A",3 449 | "A",3 450 | "A",1 451 | "A",2 452 | "A",1 453 | "A",2 454 | "B",3 455 | "B",2 456 | "B",1 457 | "B",3 458 | "B",3 459 | "B",3 460 | "A",2 461 | "A",1 462 | "A",2 463 | "A",1 464 | "A",3 465 | "A",2 466 | "A",3 467 | "B",3 468 | "B",3 469 | "B",1 470 | "B",3 471 | "B",2 472 | "B",3 473 | "A",3 474 | "A",1 475 | "A",2 476 | "A",3 477 | "A",1 478 | "A",1 479 | "A",2 480 | "A",1 481 | "A",2 482 | "A",2 483 | "A",2 484 | "A",3 485 | "A",2 486 | "A",1 487 | "A",2 488 | "A",3 489 | "A",2 490 | "A",3 491 | "A",3 492 | "A",1 493 | "A",1 494 | "A",1 495 | "A",3 496 | "A",2 497 | "A",2 498 | "A",3 499 | "B",3 500 | "A",2 501 | "A",3 502 | -------------------------------------------------------------------------------- /part3/data_r.csv: -------------------------------------------------------------------------------- 1 | "Hidden","Visible" 2 | "B",1 3 | "B",2 4 | "B",3 5 | "B",3 6 | "B",3 7 | "B",3 8 | "B",3 9 | "B",3 10 | "B",3 11 | "B",3 12 | "B",3 13 | "B",3 14 | "B",3 15 | "B",3 16 | "B",3 17 | "B",3 18 | "B",2 19 | "B",3 20 | "B",3 21 | "B",3 22 | "B",3 23 | "B",2 24 | "A",2 25 | "A",2 26 | "A",1 27 | "A",3 28 | "A",2 29 | "A",3 30 | "A",1 31 | "A",3 32 | "A",1 33 | "A",2 34 | "B",3 35 | "B",2 36 | "B",3 37 | "B",1 38 | "B",3 39 | "B",1 40 | "B",3 41 | "B",3 42 | "A",1 43 | "A",3 44 | "A",3 45 | "A",3 46 | "A",1 47 | "A",1 48 | "A",2 49 | "A",1 50 | "A",2 51 | "A",3 52 | "A",3 53 | "B",3 54 | "B",3 55 | "B",1 56 | "B",3 57 | "B",3 58 | "B",3 59 | "B",2 60 | "A",3 61 | "A",1 62 | "A",2 63 | "A",1 64 | "A",1 65 | "A",3 66 | "A",2 67 | "B",3 68 | "B",2 69 | "A",2 70 | "A",2 71 | "A",1 72 | "A",3 73 | "A",1 74 | "A",1 75 | "A",2 76 | "A",2 77 | "A",3 78 | "A",1 79 | "A",2 80 | "A",3 81 | "A",1 82 | "A",2 83 | "A",1 84 | "A",3 85 | "A",2 86 | "A",1 87 | "A",1 88 | "A",3 89 | "A",1 90 | "A",2 91 | "A",1 92 | "A",3 93 | "A",2 94 | "A",3 95 | "A",2 96 | "B",2 97 | "B",3 98 | "B",2 99 | "B",3 100 | "B",3 101 | "B",3 102 | "B",2 103 | "A",3 104 | "A",2 105 | "A",3 106 | "A",2 107 | "A",2 108 | "A",2 109 | "A",3 110 | "B",3 111 | "B",2 112 | "B",3 113 | "B",3 114 | "B",2 115 | "B",3 116 | "B",3 117 | "B",3 118 | "B",3 119 | "B",3 120 | "B",3 121 | "A",3 122 | "A",1 123 | "A",1 124 | "A",1 125 | "A",2 126 | "A",2 127 | "A",2 128 | "A",3 129 | "A",2 130 | "A",1 131 | "A",2 132 | "A",1 133 | "A",2 134 | "A",1 135 | "A",2 136 | "A",3 137 | "A",1 138 | "A",3 139 | "A",3 140 | "A",2 141 | "A",1 142 | "A",1 143 | "A",2 144 | "A",2 145 | "A",3 146 | "A",3 147 | "A",1 148 | "A",3 149 | "A",1 150 | "A",1 151 | "B",1 152 | "B",3 153 | "B",3 154 | "B",3 155 | "B",3 156 | "A",3 157 | "A",2 158 | "A",3 159 | "A",3 160 | "B",3 161 | "B",3 162 | "B",3 163 | "B",2 164 | "B",3 165 | "B",2 166 | "B",3 167 | "B",2 168 | "B",3 169 | "B",1 170 | "B",3 171 | "B",3 172 | "B",3 173 | "B",3 174 | "B",3 175 | "B",3 176 | "B",3 177 | "B",3 178 | "B",1 179 | "B",3 180 | "B",2 181 | "B",3 182 | "B",2 183 | "B",2 184 | "B",2 185 | "B",3 186 | "B",3 187 | "B",3 188 | "B",3 189 | "B",3 190 | "B",3 191 | "B",3 192 | "B",1 193 | "B",3 194 | "B",3 195 | "B",3 196 | "B",3 197 | "B",3 198 | "B",2 199 | "B",3 200 | "B",2 201 | "B",3 202 | "B",2 203 | "B",3 204 | "A",1 205 | "A",3 206 | "A",1 207 | "A",2 208 | "A",3 209 | "A",1 210 | "A",2 211 | "A",1 212 | "A",2 213 | "B",2 214 | "B",3 215 | "B",3 216 | "B",3 217 | "B",3 218 | "B",3 219 | "A",3 220 | "A",3 221 | "A",3 222 | "A",3 223 | "A",2 224 | "A",1 225 | "A",1 226 | "A",2 227 | "A",3 228 | "A",2 229 | "A",1 230 | "A",3 231 | "A",3 232 | "A",2 233 | "A",3 234 | "A",3 235 | "A",3 236 | "A",2 237 | "A",1 238 | "A",2 239 | "A",3 240 | "A",3 241 | "A",3 242 | "A",2 243 | "A",1 244 | "B",2 245 | "B",1 246 | "B",3 247 | "B",3 248 | "B",2 249 | "B",3 250 | "B",3 251 | "B",3 252 | "A",2 253 | "A",3 254 | "A",3 255 | "B",3 256 | "B",3 257 | "B",1 258 | "B",3 259 | "B",1 260 | "B",2 261 | "B",2 262 | "B",3 263 | "B",1 264 | "B",1 265 | "B",3 266 | "A",3 267 | "A",3 268 | "A",2 269 | "A",2 270 | "A",1 271 | "A",1 272 | "A",2 273 | "A",3 274 | "A",2 275 | "A",3 276 | "A",2 277 | "B",1 278 | "B",3 279 | "B",1 280 | "B",3 281 | "B",3 282 | "A",1 283 | "A",1 284 | "A",1 285 | "A",2 286 | "A",1 287 | "A",2 288 | "A",2 289 | "A",2 290 | "A",3 291 | "A",3 292 | "A",1 293 | "A",2 294 | "A",3 295 | "A",3 296 | "A",3 297 | "A",1 298 | "A",2 299 | "A",2 300 | "B",3 301 | "B",3 302 | "B",1 303 | "B",2 304 | "B",3 305 | "B",3 306 | "B",3 307 | "B",3 308 | "B",3 309 | "B",3 310 | "B",1 311 | "B",2 312 | "B",3 313 | "B",3 314 | "B",1 315 | "B",3 316 | "B",1 317 | "B",3 318 | "B",3 319 | "B",3 320 | "B",2 321 | "B",3 322 | "B",3 323 | "B",3 324 | "A",2 325 | "A",2 326 | "A",2 327 | "A",2 328 | "A",3 329 | "A",1 330 | "A",1 331 | "A",1 332 | "A",3 333 | "A",3 334 | "A",2 335 | "A",2 336 | "A",3 337 | "A",2 338 | "A",1 339 | "A",3 340 | "A",2 341 | "A",2 342 | "A",2 343 | "A",1 344 | "A",2 345 | "A",3 346 | "A",2 347 | "A",3 348 | "A",2 349 | "A",3 350 | "A",3 351 | "A",3 352 | "A",1 353 | "A",3 354 | "A",1 355 | "A",1 356 | "B",3 357 | "B",3 358 | "B",3 359 | "B",3 360 | "B",3 361 | "B",3 362 | "B",2 363 | "B",1 364 | "A",2 365 | "B",2 366 | "B",2 367 | "B",3 368 | "B",2 369 | "B",3 370 | "B",3 371 | "B",3 372 | "B",3 373 | "B",3 374 | "B",2 375 | "B",2 376 | "B",3 377 | "B",3 378 | "B",3 379 | "B",3 380 | "B",3 381 | "B",3 382 | "B",1 383 | "B",2 384 | "B",3 385 | "A",1 386 | "A",2 387 | "B",3 388 | "B",2 389 | "B",3 390 | "B",1 391 | "B",3 392 | "B",2 393 | "B",1 394 | "B",3 395 | "B",3 396 | "B",1 397 | "B",3 398 | "B",3 399 | "B",1 400 | "B",3 401 | "B",3 402 | "B",3 403 | "B",3 404 | "B",1 405 | "B",3 406 | "B",3 407 | "B",3 408 | "B",2 409 | "B",3 410 | "B",1 411 | "B",3 412 | "B",2 413 | "B",3 414 | "B",3 415 | "B",3 416 | "B",2 417 | "B",3 418 | "B",3 419 | "B",3 420 | "B",1 421 | "B",1 422 | "B",3 423 | "B",2 424 | "B",3 425 | "B",3 426 | "B",3 427 | "B",3 428 | "B",3 429 | "B",3 430 | "B",3 431 | "B",2 432 | "B",3 433 | "B",3 434 | "B",3 435 | "B",1 436 | "B",3 437 | "B",3 438 | "B",2 439 | "B",3 440 | "B",3 441 | "B",3 442 | "B",3 443 | "B",2 444 | "B",3 445 | "B",1 446 | "B",3 447 | "A",2 448 | "A",3 449 | "A",3 450 | "A",1 451 | "A",2 452 | "A",1 453 | "A",2 454 | "B",3 455 | "B",2 456 | "B",1 457 | "B",3 458 | "B",3 459 | "B",3 460 | "A",2 461 | "A",1 462 | "A",2 463 | "A",1 464 | "A",3 465 | "A",2 466 | "A",3 467 | "B",3 468 | "B",3 469 | "B",1 470 | "B",3 471 | "B",2 472 | "B",3 473 | "A",3 474 | "A",1 475 | "A",2 476 | "A",3 477 | "A",1 478 | "A",1 479 | "A",2 480 | "A",1 481 | "A",2 482 | "A",2 483 | "A",2 484 | "A",3 485 | "A",2 486 | "A",1 487 | "A",2 488 | "A",3 489 | "A",2 490 | "A",3 491 | "A",3 492 | "A",1 493 | "A",1 494 | "A",1 495 | "A",3 496 | "A",2 497 | "A",2 498 | "A",3 499 | "B",3 500 | "A",2 501 | "A",3 502 | -------------------------------------------------------------------------------- /part4/data_r.csv: -------------------------------------------------------------------------------- 1 | "Hidden","Visible" 2 | "B",1 3 | "B",2 4 | "B",3 5 | "B",3 6 | "B",3 7 | "B",3 8 | "B",3 9 | "B",3 10 | "B",3 11 | "B",3 12 | "B",3 13 | "B",3 14 | "B",3 15 | "B",3 16 | "B",3 17 | "B",3 18 | "B",2 19 | "B",3 20 | "B",3 21 | "B",3 22 | "B",3 23 | "B",2 24 | "A",2 25 | "A",2 26 | "A",1 27 | "A",3 28 | "A",2 29 | "A",3 30 | "A",1 31 | "A",3 32 | "A",1 33 | "A",2 34 | "B",3 35 | "B",2 36 | "B",3 37 | "B",1 38 | "B",3 39 | "B",1 40 | "B",3 41 | "B",3 42 | "A",1 43 | "A",3 44 | "A",3 45 | "A",3 46 | "A",1 47 | "A",1 48 | "A",2 49 | "A",1 50 | "A",2 51 | "A",3 52 | "A",3 53 | "B",3 54 | "B",3 55 | "B",1 56 | "B",3 57 | "B",3 58 | "B",3 59 | "B",2 60 | "A",3 61 | "A",1 62 | "A",2 63 | "A",1 64 | "A",1 65 | "A",3 66 | "A",2 67 | "B",3 68 | "B",2 69 | "A",2 70 | "A",2 71 | "A",1 72 | "A",3 73 | "A",1 74 | "A",1 75 | "A",2 76 | "A",2 77 | "A",3 78 | "A",1 79 | "A",2 80 | "A",3 81 | "A",1 82 | "A",2 83 | "A",1 84 | "A",3 85 | "A",2 86 | "A",1 87 | "A",1 88 | "A",3 89 | "A",1 90 | "A",2 91 | "A",1 92 | "A",3 93 | "A",2 94 | "A",3 95 | "A",2 96 | "B",2 97 | "B",3 98 | "B",2 99 | "B",3 100 | "B",3 101 | "B",3 102 | "B",2 103 | "A",3 104 | "A",2 105 | "A",3 106 | "A",2 107 | "A",2 108 | "A",2 109 | "A",3 110 | "B",3 111 | "B",2 112 | "B",3 113 | "B",3 114 | "B",2 115 | "B",3 116 | "B",3 117 | "B",3 118 | "B",3 119 | "B",3 120 | "B",3 121 | "A",3 122 | "A",1 123 | "A",1 124 | "A",1 125 | "A",2 126 | "A",2 127 | "A",2 128 | "A",3 129 | "A",2 130 | "A",1 131 | "A",2 132 | "A",1 133 | "A",2 134 | "A",1 135 | "A",2 136 | "A",3 137 | "A",1 138 | "A",3 139 | "A",3 140 | "A",2 141 | "A",1 142 | "A",1 143 | "A",2 144 | "A",2 145 | "A",3 146 | "A",3 147 | "A",1 148 | "A",3 149 | "A",1 150 | "A",1 151 | "B",1 152 | "B",3 153 | "B",3 154 | "B",3 155 | "B",3 156 | "A",3 157 | "A",2 158 | "A",3 159 | "A",3 160 | "B",3 161 | "B",3 162 | "B",3 163 | "B",2 164 | "B",3 165 | "B",2 166 | "B",3 167 | "B",2 168 | "B",3 169 | "B",1 170 | "B",3 171 | "B",3 172 | "B",3 173 | "B",3 174 | "B",3 175 | "B",3 176 | "B",3 177 | "B",3 178 | "B",1 179 | "B",3 180 | "B",2 181 | "B",3 182 | "B",2 183 | "B",2 184 | "B",2 185 | "B",3 186 | "B",3 187 | "B",3 188 | "B",3 189 | "B",3 190 | "B",3 191 | "B",3 192 | "B",1 193 | "B",3 194 | "B",3 195 | "B",3 196 | "B",3 197 | "B",3 198 | "B",2 199 | "B",3 200 | "B",2 201 | "B",3 202 | "B",2 203 | "B",3 204 | "A",1 205 | "A",3 206 | "A",1 207 | "A",2 208 | "A",3 209 | "A",1 210 | "A",2 211 | "A",1 212 | "A",2 213 | "B",2 214 | "B",3 215 | "B",3 216 | "B",3 217 | "B",3 218 | "B",3 219 | "A",3 220 | "A",3 221 | "A",3 222 | "A",3 223 | "A",2 224 | "A",1 225 | "A",1 226 | "A",2 227 | "A",3 228 | "A",2 229 | "A",1 230 | "A",3 231 | "A",3 232 | "A",2 233 | "A",3 234 | "A",3 235 | "A",3 236 | "A",2 237 | "A",1 238 | "A",2 239 | "A",3 240 | "A",3 241 | "A",3 242 | "A",2 243 | "A",1 244 | "B",2 245 | "B",1 246 | "B",3 247 | "B",3 248 | "B",2 249 | "B",3 250 | "B",3 251 | "B",3 252 | "A",2 253 | "A",3 254 | "A",3 255 | "B",3 256 | "B",3 257 | "B",1 258 | "B",3 259 | "B",1 260 | "B",2 261 | "B",2 262 | "B",3 263 | "B",1 264 | "B",1 265 | "B",3 266 | "A",3 267 | "A",3 268 | "A",2 269 | "A",2 270 | "A",1 271 | "A",1 272 | "A",2 273 | "A",3 274 | "A",2 275 | "A",3 276 | "A",2 277 | "B",1 278 | "B",3 279 | "B",1 280 | "B",3 281 | "B",3 282 | "A",1 283 | "A",1 284 | "A",1 285 | "A",2 286 | "A",1 287 | "A",2 288 | "A",2 289 | "A",2 290 | "A",3 291 | "A",3 292 | "A",1 293 | "A",2 294 | "A",3 295 | "A",3 296 | "A",3 297 | "A",1 298 | "A",2 299 | "A",2 300 | "B",3 301 | "B",3 302 | "B",1 303 | "B",2 304 | "B",3 305 | "B",3 306 | "B",3 307 | "B",3 308 | "B",3 309 | "B",3 310 | "B",1 311 | "B",2 312 | "B",3 313 | "B",3 314 | "B",1 315 | "B",3 316 | "B",1 317 | "B",3 318 | "B",3 319 | "B",3 320 | "B",2 321 | "B",3 322 | "B",3 323 | "B",3 324 | "A",2 325 | "A",2 326 | "A",2 327 | "A",2 328 | "A",3 329 | "A",1 330 | "A",1 331 | "A",1 332 | "A",3 333 | "A",3 334 | "A",2 335 | "A",2 336 | "A",3 337 | "A",2 338 | "A",1 339 | "A",3 340 | "A",2 341 | "A",2 342 | "A",2 343 | "A",1 344 | "A",2 345 | "A",3 346 | "A",2 347 | "A",3 348 | "A",2 349 | "A",3 350 | "A",3 351 | "A",3 352 | "A",1 353 | "A",3 354 | "A",1 355 | "A",1 356 | "B",3 357 | "B",3 358 | "B",3 359 | "B",3 360 | "B",3 361 | "B",3 362 | "B",2 363 | "B",1 364 | "A",2 365 | "B",2 366 | "B",2 367 | "B",3 368 | "B",2 369 | "B",3 370 | "B",3 371 | "B",3 372 | "B",3 373 | "B",3 374 | "B",2 375 | "B",2 376 | "B",3 377 | "B",3 378 | "B",3 379 | "B",3 380 | "B",3 381 | "B",3 382 | "B",1 383 | "B",2 384 | "B",3 385 | "A",1 386 | "A",2 387 | "B",3 388 | "B",2 389 | "B",3 390 | "B",1 391 | "B",3 392 | "B",2 393 | "B",1 394 | "B",3 395 | "B",3 396 | "B",1 397 | "B",3 398 | "B",3 399 | "B",1 400 | "B",3 401 | "B",3 402 | "B",3 403 | "B",3 404 | "B",1 405 | "B",3 406 | "B",3 407 | "B",3 408 | "B",2 409 | "B",3 410 | "B",1 411 | "B",3 412 | "B",2 413 | "B",3 414 | "B",3 415 | "B",3 416 | "B",2 417 | "B",3 418 | "B",3 419 | "B",3 420 | "B",1 421 | "B",1 422 | "B",3 423 | "B",2 424 | "B",3 425 | "B",3 426 | "B",3 427 | "B",3 428 | "B",3 429 | "B",3 430 | "B",3 431 | "B",2 432 | "B",3 433 | "B",3 434 | "B",3 435 | "B",1 436 | "B",3 437 | "B",3 438 | "B",2 439 | "B",3 440 | "B",3 441 | "B",3 442 | "B",3 443 | "B",2 444 | "B",3 445 | "B",1 446 | "B",3 447 | "A",2 448 | "A",3 449 | "A",3 450 | "A",1 451 | "A",2 452 | "A",1 453 | "A",2 454 | "B",3 455 | "B",2 456 | "B",1 457 | "B",3 458 | "B",3 459 | "B",3 460 | "A",2 461 | "A",1 462 | "A",2 463 | "A",1 464 | "A",3 465 | "A",2 466 | "A",3 467 | "B",3 468 | "B",3 469 | "B",1 470 | "B",3 471 | "B",2 472 | "B",3 473 | "A",3 474 | "A",1 475 | "A",2 476 | "A",3 477 | "A",1 478 | "A",1 479 | "A",2 480 | "A",1 481 | "A",2 482 | "A",2 483 | "A",2 484 | "A",3 485 | "A",2 486 | "A",1 487 | "A",2 488 | "A",3 489 | "A",2 490 | "A",3 491 | "A",3 492 | "A",1 493 | "A",1 494 | "A",1 495 | "A",3 496 | "A",2 497 | "A",2 498 | "A",3 499 | "B",3 500 | "A",2 501 | "A",3 502 | -------------------------------------------------------------------------------- /part2/data_python.csv: -------------------------------------------------------------------------------- 1 | "Hidden","Visible" 2 | "B",0 3 | "B",1 4 | "B",2 5 | "B",2 6 | "B",2 7 | "B",2 8 | "B",2 9 | "B",2 10 | "B",2 11 | "B",2 12 | "B",2 13 | "B",2 14 | "B",2 15 | "B",2 16 | "B",2 17 | "B",2 18 | "B",1 19 | "B",2 20 | "B",2 21 | "B",2 22 | "B",2 23 | "B",1 24 | "A",1 25 | "A",1 26 | "A",0 27 | "A",2 28 | "A",1 29 | "A",2 30 | "A",0 31 | "A",2 32 | "A",0 33 | "A",1 34 | "B",2 35 | "B",1 36 | "B",2 37 | "B",0 38 | "B",2 39 | "B",0 40 | "B",2 41 | "B",2 42 | "A",0 43 | "A",2 44 | "A",2 45 | "A",2 46 | "A",0 47 | "A",0 48 | "A",1 49 | "A",0 50 | "A",1 51 | "A",2 52 | "A",2 53 | "B",2 54 | "B",2 55 | "B",0 56 | "B",2 57 | "B",2 58 | "B",2 59 | "B",1 60 | "A",2 61 | "A",0 62 | "A",1 63 | "A",0 64 | "A",0 65 | "A",2 66 | "A",1 67 | "B",2 68 | "B",1 69 | "A",1 70 | "A",1 71 | "A",0 72 | "A",2 73 | "A",0 74 | "A",0 75 | "A",1 76 | "A",1 77 | "A",2 78 | "A",0 79 | "A",1 80 | "A",2 81 | "A",0 82 | "A",1 83 | "A",0 84 | "A",2 85 | "A",1 86 | "A",0 87 | "A",0 88 | "A",2 89 | "A",0 90 | "A",1 91 | "A",0 92 | "A",2 93 | "A",1 94 | "A",2 95 | "A",1 96 | "B",1 97 | "B",2 98 | "B",1 99 | "B",2 100 | "B",2 101 | "B",2 102 | "B",1 103 | "A",2 104 | "A",1 105 | "A",2 106 | "A",1 107 | "A",1 108 | "A",1 109 | "A",2 110 | "B",2 111 | "B",1 112 | "B",2 113 | "B",2 114 | "B",1 115 | "B",2 116 | "B",2 117 | "B",2 118 | "B",2 119 | "B",2 120 | "B",2 121 | "A",2 122 | "A",0 123 | "A",0 124 | "A",0 125 | "A",1 126 | "A",1 127 | "A",1 128 | "A",2 129 | "A",1 130 | "A",0 131 | "A",1 132 | "A",0 133 | "A",1 134 | "A",0 135 | "A",1 136 | "A",2 137 | "A",0 138 | "A",2 139 | "A",2 140 | "A",1 141 | "A",0 142 | "A",0 143 | "A",1 144 | "A",1 145 | "A",2 146 | "A",2 147 | "A",0 148 | "A",2 149 | "A",0 150 | "A",0 151 | "B",0 152 | "B",2 153 | "B",2 154 | "B",2 155 | "B",2 156 | "A",2 157 | "A",1 158 | "A",2 159 | "A",2 160 | "B",2 161 | "B",2 162 | "B",2 163 | "B",1 164 | "B",2 165 | "B",1 166 | "B",2 167 | "B",1 168 | "B",2 169 | "B",0 170 | "B",2 171 | "B",2 172 | "B",2 173 | "B",2 174 | "B",2 175 | "B",2 176 | "B",2 177 | "B",2 178 | "B",0 179 | "B",2 180 | "B",1 181 | "B",2 182 | "B",1 183 | "B",1 184 | "B",1 185 | "B",2 186 | "B",2 187 | "B",2 188 | "B",2 189 | "B",2 190 | "B",2 191 | "B",2 192 | "B",0 193 | "B",2 194 | "B",2 195 | "B",2 196 | "B",2 197 | "B",2 198 | "B",1 199 | "B",2 200 | "B",1 201 | "B",2 202 | "B",1 203 | "B",2 204 | "A",0 205 | "A",2 206 | "A",0 207 | "A",1 208 | "A",2 209 | "A",0 210 | "A",1 211 | "A",0 212 | "A",1 213 | "B",1 214 | "B",2 215 | "B",2 216 | "B",2 217 | "B",2 218 | "B",2 219 | "A",2 220 | "A",2 221 | "A",2 222 | "A",2 223 | "A",1 224 | "A",0 225 | "A",0 226 | "A",1 227 | "A",2 228 | "A",1 229 | "A",0 230 | "A",2 231 | "A",2 232 | "A",1 233 | "A",2 234 | "A",2 235 | "A",2 236 | "A",1 237 | "A",0 238 | "A",1 239 | "A",2 240 | "A",2 241 | "A",2 242 | "A",1 243 | "A",0 244 | "B",1 245 | "B",0 246 | "B",2 247 | "B",2 248 | "B",1 249 | "B",2 250 | "B",2 251 | "B",2 252 | "A",1 253 | "A",2 254 | "A",2 255 | "B",2 256 | "B",2 257 | "B",0 258 | "B",2 259 | "B",0 260 | "B",1 261 | "B",1 262 | "B",2 263 | "B",0 264 | "B",0 265 | "B",2 266 | "A",2 267 | "A",2 268 | "A",1 269 | "A",1 270 | "A",0 271 | "A",0 272 | "A",1 273 | "A",2 274 | "A",1 275 | "A",2 276 | "A",1 277 | "B",0 278 | "B",2 279 | "B",0 280 | "B",2 281 | "B",2 282 | "A",0 283 | "A",0 284 | "A",0 285 | "A",1 286 | "A",0 287 | "A",1 288 | "A",1 289 | "A",1 290 | "A",2 291 | "A",2 292 | "A",0 293 | "A",1 294 | "A",2 295 | "A",2 296 | "A",2 297 | "A",0 298 | "A",1 299 | "A",1 300 | "B",2 301 | "B",2 302 | "B",0 303 | "B",1 304 | "B",2 305 | "B",2 306 | "B",2 307 | "B",2 308 | "B",2 309 | "B",2 310 | "B",0 311 | "B",1 312 | "B",2 313 | "B",2 314 | "B",0 315 | "B",2 316 | "B",0 317 | "B",2 318 | "B",2 319 | "B",2 320 | "B",1 321 | "B",2 322 | "B",2 323 | "B",2 324 | "A",1 325 | "A",1 326 | "A",1 327 | "A",1 328 | "A",2 329 | "A",0 330 | "A",0 331 | "A",0 332 | "A",2 333 | "A",2 334 | "A",1 335 | "A",1 336 | "A",2 337 | "A",1 338 | "A",0 339 | "A",2 340 | "A",1 341 | "A",1 342 | "A",1 343 | "A",0 344 | "A",1 345 | "A",2 346 | "A",1 347 | "A",2 348 | "A",1 349 | "A",2 350 | "A",2 351 | "A",2 352 | "A",0 353 | "A",2 354 | "A",0 355 | "A",0 356 | "B",2 357 | "B",2 358 | "B",2 359 | "B",2 360 | "B",2 361 | "B",2 362 | "B",1 363 | "B",0 364 | "A",1 365 | "B",1 366 | "B",1 367 | "B",2 368 | "B",1 369 | "B",2 370 | "B",2 371 | "B",2 372 | "B",2 373 | "B",2 374 | "B",1 375 | "B",1 376 | "B",2 377 | "B",2 378 | "B",2 379 | "B",2 380 | "B",2 381 | "B",2 382 | "B",0 383 | "B",1 384 | "B",2 385 | "A",0 386 | "A",1 387 | "B",2 388 | "B",1 389 | "B",2 390 | "B",0 391 | "B",2 392 | "B",1 393 | "B",0 394 | "B",2 395 | "B",2 396 | "B",0 397 | "B",2 398 | "B",2 399 | "B",0 400 | "B",2 401 | "B",2 402 | "B",2 403 | "B",2 404 | "B",0 405 | "B",2 406 | "B",2 407 | "B",2 408 | "B",1 409 | "B",2 410 | "B",0 411 | "B",2 412 | "B",1 413 | "B",2 414 | "B",2 415 | "B",2 416 | "B",1 417 | "B",2 418 | "B",2 419 | "B",2 420 | "B",0 421 | "B",0 422 | "B",2 423 | "B",1 424 | "B",2 425 | "B",2 426 | "B",2 427 | "B",2 428 | "B",2 429 | "B",2 430 | "B",2 431 | "B",1 432 | "B",2 433 | "B",2 434 | "B",2 435 | "B",0 436 | "B",2 437 | "B",2 438 | "B",1 439 | "B",2 440 | "B",2 441 | "B",2 442 | "B",2 443 | "B",1 444 | "B",2 445 | "B",0 446 | "B",2 447 | "A",1 448 | "A",2 449 | "A",2 450 | "A",0 451 | "A",1 452 | "A",0 453 | "A",1 454 | "B",2 455 | "B",1 456 | "B",0 457 | "B",2 458 | "B",2 459 | "B",2 460 | "A",1 461 | "A",0 462 | "A",1 463 | "A",0 464 | "A",2 465 | "A",1 466 | "A",2 467 | "B",2 468 | "B",2 469 | "B",0 470 | "B",2 471 | "B",1 472 | "B",2 473 | "A",2 474 | "A",0 475 | "A",1 476 | "A",2 477 | "A",0 478 | "A",0 479 | "A",1 480 | "A",0 481 | "A",1 482 | "A",1 483 | "A",1 484 | "A",2 485 | "A",1 486 | "A",0 487 | "A",1 488 | "A",2 489 | "A",1 490 | "A",2 491 | "A",2 492 | "A",0 493 | "A",0 494 | "A",0 495 | "A",2 496 | "A",1 497 | "A",1 498 | "A",2 499 | "B",2 500 | "A",1 501 | "A",2 502 | -------------------------------------------------------------------------------- /part3/data_python.csv: -------------------------------------------------------------------------------- 1 | "Hidden","Visible" 2 | "B",0 3 | "B",1 4 | "B",2 5 | "B",2 6 | "B",2 7 | "B",2 8 | "B",2 9 | "B",2 10 | "B",2 11 | "B",2 12 | "B",2 13 | "B",2 14 | "B",2 15 | "B",2 16 | "B",2 17 | "B",2 18 | "B",1 19 | "B",2 20 | "B",2 21 | "B",2 22 | "B",2 23 | "B",1 24 | "A",1 25 | "A",1 26 | "A",0 27 | "A",2 28 | "A",1 29 | "A",2 30 | "A",0 31 | "A",2 32 | "A",0 33 | "A",1 34 | "B",2 35 | "B",1 36 | "B",2 37 | "B",0 38 | "B",2 39 | "B",0 40 | "B",2 41 | "B",2 42 | "A",0 43 | "A",2 44 | "A",2 45 | "A",2 46 | "A",0 47 | "A",0 48 | "A",1 49 | "A",0 50 | "A",1 51 | "A",2 52 | "A",2 53 | "B",2 54 | "B",2 55 | "B",0 56 | "B",2 57 | "B",2 58 | "B",2 59 | "B",1 60 | "A",2 61 | "A",0 62 | "A",1 63 | "A",0 64 | "A",0 65 | "A",2 66 | "A",1 67 | "B",2 68 | "B",1 69 | "A",1 70 | "A",1 71 | "A",0 72 | "A",2 73 | "A",0 74 | "A",0 75 | "A",1 76 | "A",1 77 | "A",2 78 | "A",0 79 | "A",1 80 | "A",2 81 | "A",0 82 | "A",1 83 | "A",0 84 | "A",2 85 | "A",1 86 | "A",0 87 | "A",0 88 | "A",2 89 | "A",0 90 | "A",1 91 | "A",0 92 | "A",2 93 | "A",1 94 | "A",2 95 | "A",1 96 | "B",1 97 | "B",2 98 | "B",1 99 | "B",2 100 | "B",2 101 | "B",2 102 | "B",1 103 | "A",2 104 | "A",1 105 | "A",2 106 | "A",1 107 | "A",1 108 | "A",1 109 | "A",2 110 | "B",2 111 | "B",1 112 | "B",2 113 | "B",2 114 | "B",1 115 | "B",2 116 | "B",2 117 | "B",2 118 | "B",2 119 | "B",2 120 | "B",2 121 | "A",2 122 | "A",0 123 | "A",0 124 | "A",0 125 | "A",1 126 | "A",1 127 | "A",1 128 | "A",2 129 | "A",1 130 | "A",0 131 | "A",1 132 | "A",0 133 | "A",1 134 | "A",0 135 | "A",1 136 | "A",2 137 | "A",0 138 | "A",2 139 | "A",2 140 | "A",1 141 | "A",0 142 | "A",0 143 | "A",1 144 | "A",1 145 | "A",2 146 | "A",2 147 | "A",0 148 | "A",2 149 | "A",0 150 | "A",0 151 | "B",0 152 | "B",2 153 | "B",2 154 | "B",2 155 | "B",2 156 | "A",2 157 | "A",1 158 | "A",2 159 | "A",2 160 | "B",2 161 | "B",2 162 | "B",2 163 | "B",1 164 | "B",2 165 | "B",1 166 | "B",2 167 | "B",1 168 | "B",2 169 | "B",0 170 | "B",2 171 | "B",2 172 | "B",2 173 | "B",2 174 | "B",2 175 | "B",2 176 | "B",2 177 | "B",2 178 | "B",0 179 | "B",2 180 | "B",1 181 | "B",2 182 | "B",1 183 | "B",1 184 | "B",1 185 | "B",2 186 | "B",2 187 | "B",2 188 | "B",2 189 | "B",2 190 | "B",2 191 | "B",2 192 | "B",0 193 | "B",2 194 | "B",2 195 | "B",2 196 | "B",2 197 | "B",2 198 | "B",1 199 | "B",2 200 | "B",1 201 | "B",2 202 | "B",1 203 | "B",2 204 | "A",0 205 | "A",2 206 | "A",0 207 | "A",1 208 | "A",2 209 | "A",0 210 | "A",1 211 | "A",0 212 | "A",1 213 | "B",1 214 | "B",2 215 | "B",2 216 | "B",2 217 | "B",2 218 | "B",2 219 | "A",2 220 | "A",2 221 | "A",2 222 | "A",2 223 | "A",1 224 | "A",0 225 | "A",0 226 | "A",1 227 | "A",2 228 | "A",1 229 | "A",0 230 | "A",2 231 | "A",2 232 | "A",1 233 | "A",2 234 | "A",2 235 | "A",2 236 | "A",1 237 | "A",0 238 | "A",1 239 | "A",2 240 | "A",2 241 | "A",2 242 | "A",1 243 | "A",0 244 | "B",1 245 | "B",0 246 | "B",2 247 | "B",2 248 | "B",1 249 | "B",2 250 | "B",2 251 | "B",2 252 | "A",1 253 | "A",2 254 | "A",2 255 | "B",2 256 | "B",2 257 | "B",0 258 | "B",2 259 | "B",0 260 | "B",1 261 | "B",1 262 | "B",2 263 | "B",0 264 | "B",0 265 | "B",2 266 | "A",2 267 | "A",2 268 | "A",1 269 | "A",1 270 | "A",0 271 | "A",0 272 | "A",1 273 | "A",2 274 | "A",1 275 | "A",2 276 | "A",1 277 | "B",0 278 | "B",2 279 | "B",0 280 | "B",2 281 | "B",2 282 | "A",0 283 | "A",0 284 | "A",0 285 | "A",1 286 | "A",0 287 | "A",1 288 | "A",1 289 | "A",1 290 | "A",2 291 | "A",2 292 | "A",0 293 | "A",1 294 | "A",2 295 | "A",2 296 | "A",2 297 | "A",0 298 | "A",1 299 | "A",1 300 | "B",2 301 | "B",2 302 | "B",0 303 | "B",1 304 | "B",2 305 | "B",2 306 | "B",2 307 | "B",2 308 | "B",2 309 | "B",2 310 | "B",0 311 | "B",1 312 | "B",2 313 | "B",2 314 | "B",0 315 | "B",2 316 | "B",0 317 | "B",2 318 | "B",2 319 | "B",2 320 | "B",1 321 | "B",2 322 | "B",2 323 | "B",2 324 | "A",1 325 | "A",1 326 | "A",1 327 | "A",1 328 | "A",2 329 | "A",0 330 | "A",0 331 | "A",0 332 | "A",2 333 | "A",2 334 | "A",1 335 | "A",1 336 | "A",2 337 | "A",1 338 | "A",0 339 | "A",2 340 | "A",1 341 | "A",1 342 | "A",1 343 | "A",0 344 | "A",1 345 | "A",2 346 | "A",1 347 | "A",2 348 | "A",1 349 | "A",2 350 | "A",2 351 | "A",2 352 | "A",0 353 | "A",2 354 | "A",0 355 | "A",0 356 | "B",2 357 | "B",2 358 | "B",2 359 | "B",2 360 | "B",2 361 | "B",2 362 | "B",1 363 | "B",0 364 | "A",1 365 | "B",1 366 | "B",1 367 | "B",2 368 | "B",1 369 | "B",2 370 | "B",2 371 | "B",2 372 | "B",2 373 | "B",2 374 | "B",1 375 | "B",1 376 | "B",2 377 | "B",2 378 | "B",2 379 | "B",2 380 | "B",2 381 | "B",2 382 | "B",0 383 | "B",1 384 | "B",2 385 | "A",0 386 | "A",1 387 | "B",2 388 | "B",1 389 | "B",2 390 | "B",0 391 | "B",2 392 | "B",1 393 | "B",0 394 | "B",2 395 | "B",2 396 | "B",0 397 | "B",2 398 | "B",2 399 | "B",0 400 | "B",2 401 | "B",2 402 | "B",2 403 | "B",2 404 | "B",0 405 | "B",2 406 | "B",2 407 | "B",2 408 | "B",1 409 | "B",2 410 | "B",0 411 | "B",2 412 | "B",1 413 | "B",2 414 | "B",2 415 | "B",2 416 | "B",1 417 | "B",2 418 | "B",2 419 | "B",2 420 | "B",0 421 | "B",0 422 | "B",2 423 | "B",1 424 | "B",2 425 | "B",2 426 | "B",2 427 | "B",2 428 | "B",2 429 | "B",2 430 | "B",2 431 | "B",1 432 | "B",2 433 | "B",2 434 | "B",2 435 | "B",0 436 | "B",2 437 | "B",2 438 | "B",1 439 | "B",2 440 | "B",2 441 | "B",2 442 | "B",2 443 | "B",1 444 | "B",2 445 | "B",0 446 | "B",2 447 | "A",1 448 | "A",2 449 | "A",2 450 | "A",0 451 | "A",1 452 | "A",0 453 | "A",1 454 | "B",2 455 | "B",1 456 | "B",0 457 | "B",2 458 | "B",2 459 | "B",2 460 | "A",1 461 | "A",0 462 | "A",1 463 | "A",0 464 | "A",2 465 | "A",1 466 | "A",2 467 | "B",2 468 | "B",2 469 | "B",0 470 | "B",2 471 | "B",1 472 | "B",2 473 | "A",2 474 | "A",0 475 | "A",1 476 | "A",2 477 | "A",0 478 | "A",0 479 | "A",1 480 | "A",0 481 | "A",1 482 | "A",1 483 | "A",1 484 | "A",2 485 | "A",1 486 | "A",0 487 | "A",1 488 | "A",2 489 | "A",1 490 | "A",2 491 | "A",2 492 | "A",0 493 | "A",0 494 | "A",0 495 | "A",2 496 | "A",1 497 | "A",1 498 | "A",2 499 | "B",2 500 | "A",1 501 | "A",2 502 | -------------------------------------------------------------------------------- /part4/data_python.csv: -------------------------------------------------------------------------------- 1 | "Hidden","Visible" 2 | "B",0 3 | "B",1 4 | "B",2 5 | "B",2 6 | "B",2 7 | "B",2 8 | "B",2 9 | "B",2 10 | "B",2 11 | "B",2 12 | "B",2 13 | "B",2 14 | "B",2 15 | "B",2 16 | "B",2 17 | "B",2 18 | "B",1 19 | "B",2 20 | "B",2 21 | "B",2 22 | "B",2 23 | "B",1 24 | "A",1 25 | "A",1 26 | "A",0 27 | "A",2 28 | "A",1 29 | "A",2 30 | "A",0 31 | "A",2 32 | "A",0 33 | "A",1 34 | "B",2 35 | "B",1 36 | "B",2 37 | "B",0 38 | "B",2 39 | "B",0 40 | "B",2 41 | "B",2 42 | "A",0 43 | "A",2 44 | "A",2 45 | "A",2 46 | "A",0 47 | "A",0 48 | "A",1 49 | "A",0 50 | "A",1 51 | "A",2 52 | "A",2 53 | "B",2 54 | "B",2 55 | "B",0 56 | "B",2 57 | "B",2 58 | "B",2 59 | "B",1 60 | "A",2 61 | "A",0 62 | "A",1 63 | "A",0 64 | "A",0 65 | "A",2 66 | "A",1 67 | "B",2 68 | "B",1 69 | "A",1 70 | "A",1 71 | "A",0 72 | "A",2 73 | "A",0 74 | "A",0 75 | "A",1 76 | "A",1 77 | "A",2 78 | "A",0 79 | "A",1 80 | "A",2 81 | "A",0 82 | "A",1 83 | "A",0 84 | "A",2 85 | "A",1 86 | "A",0 87 | "A",0 88 | "A",2 89 | "A",0 90 | "A",1 91 | "A",0 92 | "A",2 93 | "A",1 94 | "A",2 95 | "A",1 96 | "B",1 97 | "B",2 98 | "B",1 99 | "B",2 100 | "B",2 101 | "B",2 102 | "B",1 103 | "A",2 104 | "A",1 105 | "A",2 106 | "A",1 107 | "A",1 108 | "A",1 109 | "A",2 110 | "B",2 111 | "B",1 112 | "B",2 113 | "B",2 114 | "B",1 115 | "B",2 116 | "B",2 117 | "B",2 118 | "B",2 119 | "B",2 120 | "B",2 121 | "A",2 122 | "A",0 123 | "A",0 124 | "A",0 125 | "A",1 126 | "A",1 127 | "A",1 128 | "A",2 129 | "A",1 130 | "A",0 131 | "A",1 132 | "A",0 133 | "A",1 134 | "A",0 135 | "A",1 136 | "A",2 137 | "A",0 138 | "A",2 139 | "A",2 140 | "A",1 141 | "A",0 142 | "A",0 143 | "A",1 144 | "A",1 145 | "A",2 146 | "A",2 147 | "A",0 148 | "A",2 149 | "A",0 150 | "A",0 151 | "B",0 152 | "B",2 153 | "B",2 154 | "B",2 155 | "B",2 156 | "A",2 157 | "A",1 158 | "A",2 159 | "A",2 160 | "B",2 161 | "B",2 162 | "B",2 163 | "B",1 164 | "B",2 165 | "B",1 166 | "B",2 167 | "B",1 168 | "B",2 169 | "B",0 170 | "B",2 171 | "B",2 172 | "B",2 173 | "B",2 174 | "B",2 175 | "B",2 176 | "B",2 177 | "B",2 178 | "B",0 179 | "B",2 180 | "B",1 181 | "B",2 182 | "B",1 183 | "B",1 184 | "B",1 185 | "B",2 186 | "B",2 187 | "B",2 188 | "B",2 189 | "B",2 190 | "B",2 191 | "B",2 192 | "B",0 193 | "B",2 194 | "B",2 195 | "B",2 196 | "B",2 197 | "B",2 198 | "B",1 199 | "B",2 200 | "B",1 201 | "B",2 202 | "B",1 203 | "B",2 204 | "A",0 205 | "A",2 206 | "A",0 207 | "A",1 208 | "A",2 209 | "A",0 210 | "A",1 211 | "A",0 212 | "A",1 213 | "B",1 214 | "B",2 215 | "B",2 216 | "B",2 217 | "B",2 218 | "B",2 219 | "A",2 220 | "A",2 221 | "A",2 222 | "A",2 223 | "A",1 224 | "A",0 225 | "A",0 226 | "A",1 227 | "A",2 228 | "A",1 229 | "A",0 230 | "A",2 231 | "A",2 232 | "A",1 233 | "A",2 234 | "A",2 235 | "A",2 236 | "A",1 237 | "A",0 238 | "A",1 239 | "A",2 240 | "A",2 241 | "A",2 242 | "A",1 243 | "A",0 244 | "B",1 245 | "B",0 246 | "B",2 247 | "B",2 248 | "B",1 249 | "B",2 250 | "B",2 251 | "B",2 252 | "A",1 253 | "A",2 254 | "A",2 255 | "B",2 256 | "B",2 257 | "B",0 258 | "B",2 259 | "B",0 260 | "B",1 261 | "B",1 262 | "B",2 263 | "B",0 264 | "B",0 265 | "B",2 266 | "A",2 267 | "A",2 268 | "A",1 269 | "A",1 270 | "A",0 271 | "A",0 272 | "A",1 273 | "A",2 274 | "A",1 275 | "A",2 276 | "A",1 277 | "B",0 278 | "B",2 279 | "B",0 280 | "B",2 281 | "B",2 282 | "A",0 283 | "A",0 284 | "A",0 285 | "A",1 286 | "A",0 287 | "A",1 288 | "A",1 289 | "A",1 290 | "A",2 291 | "A",2 292 | "A",0 293 | "A",1 294 | "A",2 295 | "A",2 296 | "A",2 297 | "A",0 298 | "A",1 299 | "A",1 300 | "B",2 301 | "B",2 302 | "B",0 303 | "B",1 304 | "B",2 305 | "B",2 306 | "B",2 307 | "B",2 308 | "B",2 309 | "B",2 310 | "B",0 311 | "B",1 312 | "B",2 313 | "B",2 314 | "B",0 315 | "B",2 316 | "B",0 317 | "B",2 318 | "B",2 319 | "B",2 320 | "B",1 321 | "B",2 322 | "B",2 323 | "B",2 324 | "A",1 325 | "A",1 326 | "A",1 327 | "A",1 328 | "A",2 329 | "A",0 330 | "A",0 331 | "A",0 332 | "A",2 333 | "A",2 334 | "A",1 335 | "A",1 336 | "A",2 337 | "A",1 338 | "A",0 339 | "A",2 340 | "A",1 341 | "A",1 342 | "A",1 343 | "A",0 344 | "A",1 345 | "A",2 346 | "A",1 347 | "A",2 348 | "A",1 349 | "A",2 350 | "A",2 351 | "A",2 352 | "A",0 353 | "A",2 354 | "A",0 355 | "A",0 356 | "B",2 357 | "B",2 358 | "B",2 359 | "B",2 360 | "B",2 361 | "B",2 362 | "B",1 363 | "B",0 364 | "A",1 365 | "B",1 366 | "B",1 367 | "B",2 368 | "B",1 369 | "B",2 370 | "B",2 371 | "B",2 372 | "B",2 373 | "B",2 374 | "B",1 375 | "B",1 376 | "B",2 377 | "B",2 378 | "B",2 379 | "B",2 380 | "B",2 381 | "B",2 382 | "B",0 383 | "B",1 384 | "B",2 385 | "A",0 386 | "A",1 387 | "B",2 388 | "B",1 389 | "B",2 390 | "B",0 391 | "B",2 392 | "B",1 393 | "B",0 394 | "B",2 395 | "B",2 396 | "B",0 397 | "B",2 398 | "B",2 399 | "B",0 400 | "B",2 401 | "B",2 402 | "B",2 403 | "B",2 404 | "B",0 405 | "B",2 406 | "B",2 407 | "B",2 408 | "B",1 409 | "B",2 410 | "B",0 411 | "B",2 412 | "B",1 413 | "B",2 414 | "B",2 415 | "B",2 416 | "B",1 417 | "B",2 418 | "B",2 419 | "B",2 420 | "B",0 421 | "B",0 422 | "B",2 423 | "B",1 424 | "B",2 425 | "B",2 426 | "B",2 427 | "B",2 428 | "B",2 429 | "B",2 430 | "B",2 431 | "B",1 432 | "B",2 433 | "B",2 434 | "B",2 435 | "B",0 436 | "B",2 437 | "B",2 438 | "B",1 439 | "B",2 440 | "B",2 441 | "B",2 442 | "B",2 443 | "B",1 444 | "B",2 445 | "B",0 446 | "B",2 447 | "A",1 448 | "A",2 449 | "A",2 450 | "A",0 451 | "A",1 452 | "A",0 453 | "A",1 454 | "B",2 455 | "B",1 456 | "B",0 457 | "B",2 458 | "B",2 459 | "B",2 460 | "A",1 461 | "A",0 462 | "A",1 463 | "A",0 464 | "A",2 465 | "A",1 466 | "A",2 467 | "B",2 468 | "B",2 469 | "B",0 470 | "B",2 471 | "B",1 472 | "B",2 473 | "A",2 474 | "A",0 475 | "A",1 476 | "A",2 477 | "A",0 478 | "A",0 479 | "A",1 480 | "A",0 481 | "A",1 482 | "A",1 483 | "A",1 484 | "A",2 485 | "A",1 486 | "A",0 487 | "A",1 488 | "A",2 489 | "A",1 490 | "A",2 491 | "A",2 492 | "A",0 493 | "A",0 494 | "A",0 495 | "A",2 496 | "A",1 497 | "A",1 498 | "A",2 499 | "B",2 500 | "A",1 501 | "A",2 502 | --------------------------------------------------------------------------------