diff options
Diffstat (limited to '05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams')
9 files changed, 4471 insertions, 4 deletions
diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/reschedule_exams.cpp b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/reschedule_exams.cpp index b3ff8eb..5a3a875 100644 --- a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/reschedule_exams.cpp +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/reschedule_exams.cpp @@ -1,8 +1,104 @@ #include <iostream> #include <vector> #include <string> +#include <bits/stdc++.h> using namespace std; +struct Clause { + int firstVar; + int secondVar; +}; + +struct Vertex { + int index; + int lowLink; + bool onStack; +}; + +struct TwoSatisfiability { + int numVars; + int x; + vector<Clause> &clauses; + stack<int> st; + vector<Vertex> vertices; + vector<vector<int> > adj; + + TwoSatisfiability(int n, vector<Clause> &clauses) : + numVars(n), + clauses(clauses), + x(0), + vertices(n * 2, {-1, -1, false}), + adj(n * 2, vector<int>()) + { + } + + bool tarjan(int i, vector<int> &result) { + Vertex &v = vertices[i]; + v.index = x; + v.lowLink = x; + v.onStack = true; + st.push(i); + x++; + for (int a : adj[i]) { + Vertex &w = vertices[a]; + if (w.index == -1) { + if (!tarjan(a, result)) return false; + v.lowLink = min(v.lowLink, w.lowLink); + } else if (w.onStack) { + v.lowLink = min(v.lowLink, w.index); + } + } + // is a SCC root node + if (v.lowLink == v.index) { + for (;;) { + int i = st.top(); + int iv = inv(i); + if (vertices[iv].index == v.index) return false; + st.pop(); + if (i < numVars) { + if (result[i] == -1) + result[i] = 1; + } else { + if (result[iv] == -1) + result[iv] = 0; + } + vertices[i].onStack = false; + if (vertices[i].index == v.index) { + break; + } + } + } + return true; + } + + inline int idx(int v) { return (v > 0 ? (v - 1) : (numVars - v - 1)); } + inline int inv(int i) { return i + ((i < numVars) ? numVars : -numVars); } + + bool isSatisfiable(vector<int>& result) { + + // construct the implication graph (l1 l2) -> !l1 ->l2 !l2->l1 + for(Clause clause : clauses) { + adj[idx(-clause.firstVar)].push_back(idx(clause.secondVar)); + adj[idx(-clause.secondVar)].push_back(idx(clause.firstVar)); + } + + // find SCC's of graph + // int x = 0; + for (int i = 0; i < vertices.size(); i++) { + Vertex &v = vertices[i]; + if (v.index == -1) { + if (!tarjan(i, result)) return false; + } + } + + return true; + } +}; + +enum Color { R=1, G, B }; + +static inline int var(int vertex, int color) { return vertex * 3 + color; } + /* Arguments: * `n` - the number of vertices. @@ -13,11 +109,68 @@ using namespace std; * Otherwise, return value is an empty string. */ string assign_new_colors(int n, vector<pair<int, int>> edges, string colors) { - // Insert your code here. - if (n % 3 == 0) { + + // cout << " N : " << n << endl; + // cout << " edges : " << edges.size() << endl; + // cout << " colors : " << colors << endl; + + int vars = 3 * n; + vector<Clause> clauses; + + // for each vertex + for (int i = 0; i < n; i++) { + // each node must be of a different color than its initial state + int v1, v2, v3; + if (colors[i] == 'R') { + v1 = var(i, R); + v2 = var(i, G); + v3 = var(i, B); + } else if (colors[i] == 'G') { + v1 = var(i, G); + v2 = var(i, B); + v3 = var(i, R); + } else { + v1 = var(i, B); + v2 = var(i, R); + v3 = var(i, G); + } + clauses.push_back({-v1, -v1}); // !1 || !1 => different from initial color + clauses.push_back({ v2, v3}); // 2 || 3 => one of the other + clauses.push_back({-v2, -v3}); // !2 || !3 => not both + } + // both node of an edge cannot be of the same color + for (auto &p : edges) { + int i = p.first - 1; + int j = p.second - 1; + clauses.push_back({-var(i, R), -var(j, R)}); + clauses.push_back({-var(i, G), -var(j, G)}); + clauses.push_back({-var(i, B), -var(j, B)}); + } + + // cout << "clauses : " << clauses.size() << endl; + // cout << "vars : " << vars << endl; + TwoSatisfiability twoSat(vars, clauses); + + vector<int> result(vars, -1); + if (twoSat.isSatisfiable(result)) { + // cout << "SATISFIABLE" << endl; + // for (int i = 1; i <= vars; ++i) { + // if (result[i-1]) { + // cout << i; + // } else { + // cout << -i; + // } + // if (i < vars) { + // cout << " "; + // } else { + // cout << endl; + // } + // } string new_colors; - for (int i = 0; i < n; i++) { - new_colors.push_back("RGB"[i % 3]); + for (int i = 0; i < vars; ++i) { + if (result[i]) { + new_colors.push_back("RGB"[i % 3]); + } } return new_colors; } else { diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/01 b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/01 new file mode 100644 index 0000000..5580d77 --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/01 @@ -0,0 +1,7 @@ +4 5 +RRRG +1 3 +1 4 +3 4 +2 4 +2 3 diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/01.a b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/01.a new file mode 100644 index 0000000..cc16375 --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/01.a @@ -0,0 +1 @@ +GGBR diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/02 b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/02 new file mode 100644 index 0000000..121c83a --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/02 @@ -0,0 +1,7 @@ +4 5 +RGRR +1 3 +1 4 +3 4 +2 4 +2 3 diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/02.a b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/02.a new file mode 100644 index 0000000..21454ad --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/02.a @@ -0,0 +1 @@ +Impossible
\ No newline at end of file diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/03 b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/03 new file mode 100644 index 0000000..f58eeb9 --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/03 @@ -0,0 +1,10 @@ +7 8 +GBGBRBR +1 3 +3 2 +3 4 +4 6 +2 6 +4 5 +5 6 +1 2 diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/03.a b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/03.a new file mode 100644 index 0000000..c6ddcd6 --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/03.a @@ -0,0 +1 @@ +RGBGBRG diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/13 b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/13 new file mode 100644 index 0000000..d4d7e91 --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/13 @@ -0,0 +1,4286 @@ +997 4284 +RGRGGBGRGBBRBGBGGGBRGGGGGBRRGRBBRRGRRBBRGRRBRRGRGRRBBRBRBBRGBBRRBBBRRBRRBBGBRRGRGGBRRGGGRGRGRRBRRRGGRGRGBBGRRRGGBRGRGGGGGRGRGRRRBGGGBBRRBGBRRRGBBBRBGBRGBBBBRBRRBGGRGGRRGGGBBRBGGBRBGRBBGGBRGBBBBRBBBGGGGBGGRBRGGRGBRRGGBGGBRBBGRGRGRRRRGGGRGRRBRBRBRRBGGRRGGRBRRBRBBBBGBRBRBRGGRRBRGGGBGRGRGBRBBBGGBRRBGBRBBGRGGGGBGRGBBBGBRRGBGRRRBGBGGGRRBRGBBRGBRRRBRRBGGGBBRRRGRGGRRGGBBRBGBRGGBBGRRGGBGGGGGGBRGBRGBBBBGBBGBBGGGGRGGGGBRRRRRRRBRRBGBRRGGGRRBBBGRRBGBBRGRRRRRGRBBGGGRRRRBBGGGRGGBGBGRBRRRGBRBBGRRRBBGGRGBRGBRGRGRRBGRGBGBBRRBGGGBGRRRBGBRRRRRBBGBBGGGGGBGGGRGBGGGGGGGGGGRRRGGGBBGBGBGBBBBBBGRGGBBBGGBRBBGBGBRGBGRRGGRBRRRRRRRRBRRGBBGGGGGRGRRRBRRBRRBBBGGBBGBGBRBBBGRBGRBGBBRRBGRBGBRBBGRBGBGGRBBBRRBRBGGGGRGRRBRBGRGBRRGGGRGBRBBGBGGRGBBBRBBRRRBGRRBRRBBBBRBBRGRBRBRGRGGBGRGGBRGGBGRRBGGRRRRBRRGGBGGGGBBRRBRBGGRGGBRRGRRBRBRRRBRGGRGBGBBBRRBBBBRBBBGGRGGGBGBGRRRGBBGGRGBRRBBRGBRGGBGRBGBRGGBBGRRGBGBRRBGRGRBRGRBRBGBRBBBGRBRRRBRRGBGBBBGGRBRGRGGBBBRGGRRBBRRGGRRGRRGRRBGGBBBGBBBGGGBRGGRRGGBBGRGBBBRRGGBBRRRRRGGRRGGGGGRRGBBBBBR +3 2 +3 2 +3 1 +1 3 +1 3 +3 2 +1 3 +2 1 +1 3 +1 2 +1 3 +1 3 +3 1 +1 3 +2 3 +4 5 +4 5 +6 5 +5 7 +5 4 +7 6 +7 5 +7 5 +6 4 +5 7 +5 7 +6 7 +4 5 +7 6 +7 6 +5 7 +7 5 +12 11 +8 11 +11 10 +12 10 +10 8 +10 11 +10 8 +12 11 +10 8 +9 8 +9 12 +15 14 +15 13 +14 15 +14 15 +13 15 +13 15 +15 14 +13 15 +15 13 +13 15 +15 14 +15 13 +13 14 +17 16 +16 17 +16 17 +16 17 +16 17 +17 16 +17 16 +17 16 +16 17 +17 16 +17 16 +17 16 +16 17 +17 16 +16 17 +16 17 +16 17 +17 16 +18 20 +19 20 +18 19 +19 18 +20 18 +20 19 +20 18 +19 20 +20 19 +18 20 +18 19 +19 20 +19 20 +20 19 +19 18 +19 20 +21 22 +22 24 +25 21 +21 25 +21 23 +24 25 +22 21 +25 24 +21 23 +25 24 +26 28 +29 28 +28 29 +28 26 +27 26 +26 29 +27 26 +26 29 +29 27 +26 29 +28 29 +29 26 +28 29 +26 28 +29 28 +27 29 +28 29 +27 29 +27 26 +29 28 +34 31 +34 31 +32 34 +33 32 +31 33 +32 34 +31 33 +33 32 +33 34 +34 31 +33 30 +33 32 +33 30 +31 33 +34 31 +31 33 +31 30 +37 35 +37 36 +37 36 +37 36 +37 36 +35 37 +37 35 +35 36 +35 37 +36 37 +36 35 +36 37 +35 36 +39 38 +39 38 +38 39 +38 39 +38 39 +39 38 +38 39 +39 38 +38 39 +39 38 +38 39 +42 43 +40 42 +43 42 +40 42 +41 43 +40 42 +40 41 +42 41 +41 43 +41 40 +41 40 +43 42 +40 41 +40 41 +46 44 +45 44 +47 44 +44 47 +44 48 +45 44 +45 47 +47 46 +47 45 +44 47 +47 45 +47 48 +44 47 +46 47 +44 46 +44 45 +52 50 +51 53 +49 51 +53 50 +52 49 +49 52 +52 50 +49 51 +53 49 +52 50 +52 50 +51 52 +51 53 +49 50 +51 53 +50 52 +52 51 +49 50 +56 54 +55 57 +57 54 +56 57 +57 54 +56 54 +54 57 +56 57 +54 57 +56 57 +54 56 +54 57 +57 56 +54 56 +55 57 +56 57 +59 62 +59 61 +60 61 +60 59 +61 60 +58 59 +60 58 +62 59 +58 59 +60 62 +61 59 +63 64 +63 64 +63 64 +64 63 +63 64 +64 63 +63 64 +64 63 +64 63 +64 63 +63 64 +64 63 +64 63 +66 65 +66 65 +66 65 +65 66 +65 66 +66 65 +65 66 +65 66 +65 66 +65 66 +70 68 +67 70 +69 70 +67 68 +70 67 +70 67 +67 68 +70 68 +70 68 +69 67 +70 69 +72 71 +72 71 +72 71 +72 71 +72 71 +72 71 +71 72 +72 71 +72 71 +71 72 +71 72 +72 71 +77 73 +75 77 +75 74 +75 74 +77 75 +77 75 +77 75 +77 75 +75 76 +74 75 +77 73 +73 75 +73 75 +76 73 +75 73 +76 73 +73 75 +73 75 +75 76 +78 80 +79 80 +79 78 +78 80 +78 79 +78 79 +79 80 +78 80 +80 78 +80 78 +79 78 +79 80 +78 80 +79 80 +79 80 +79 78 +83 81 +83 81 +83 81 +83 82 +82 81 +83 81 +83 82 +83 82 +81 83 +81 83 +82 81 +83 82 +83 82 +83 81 +81 82 +83 82 +82 83 +83 81 +83 81 +83 81 +85 84 +85 84 +85 84 +85 84 +85 84 +84 85 +84 85 +84 85 +84 85 +85 84 +84 85 +84 85 +84 85 +84 85 +84 85 +85 84 +85 84 +87 86 +86 87 +87 86 +87 86 +86 87 +86 87 +87 86 +87 86 +87 86 +86 87 +87 86 +86 87 +86 87 +86 87 +87 86 +87 86 +88 90 +89 88 +89 88 +90 88 +88 89 +90 88 +90 88 +89 90 +88 90 +90 89 +88 90 +90 88 +90 89 +89 90 +91 93 +91 92 +92 91 +91 93 +93 91 +93 91 +91 92 +91 93 +92 93 +92 91 +93 92 +93 92 +97 95 +94 98 +94 95 +94 95 +94 95 +95 96 +94 97 +94 95 +95 96 +94 95 +98 94 +95 94 +96 97 +94 97 +100 99 +100 99 +99 100 +100 99 +99 100 +100 99 +99 100 +100 99 +99 100 +100 99 +100 99 +99 100 +100 99 +99 100 +99 100 +100 99 +100 99 +100 99 +102 104 +104 101 +102 104 +102 103 +102 104 +101 102 +103 104 +102 103 +101 104 +101 102 +102 103 +104 103 +101 102 +101 104 +106 107 +107 108 +106 108 +108 106 +108 105 +105 108 +107 106 +105 107 +105 108 +108 107 +105 107 +108 105 +105 108 +106 107 +108 105 +105 108 +108 106 +107 108 +109 110 +109 110 +110 109 +110 109 +109 110 +109 110 +109 110 +109 110 +110 109 +109 110 +109 110 +110 109 +112 113 +111 112 +111 112 +113 112 +112 113 +112 111 +111 112 +113 111 +113 111 +112 113 +112 111 +112 111 +113 112 +112 111 +113 111 +113 111 +113 112 +114 117 +114 117 +116 117 +114 115 +117 118 +117 114 +114 117 +117 116 +114 117 +115 116 +116 118 +115 116 +114 115 +115 117 +119 121 +122 121 +119 121 +123 120 +122 120 +121 122 +119 121 +119 121 +121 123 +121 123 +122 120 +122 119 +120 122 +123 120 +124 125 +124 126 +125 127 +125 127 +125 126 +125 127 +125 127 +124 125 +126 124 +126 125 +124 127 +128 132 +128 131 +130 132 +131 129 +131 128 +128 129 +128 131 +130 132 +129 131 +129 131 +132 129 +128 132 +131 130 +129 131 +134 133 +134 133 +133 134 +133 134 +134 133 +133 134 +134 133 +133 134 +134 133 +134 133 +133 134 +135 137 +137 136 +137 135 +136 135 +136 137 +135 136 +136 135 +137 135 +137 136 +135 136 +136 137 +139 140 +140 138 +141 140 +139 141 +140 141 +139 140 +141 138 +139 140 +141 138 +139 140 +138 141 +141 138 +142 144 +146 142 +143 145 +143 142 +143 144 +142 145 +144 142 +143 142 +146 143 +145 142 +142 144 +142 143 +148 149 +149 148 +147 148 +147 149 +149 147 +148 149 +149 147 +147 148 +148 149 +148 147 +147 149 +149 148 +148 147 +148 149 +152 150 +152 150 +153 151 +152 150 +152 153 +151 153 +153 151 +151 153 +152 153 +151 150 +151 153 +150 152 +153 152 +151 153 +151 150 +152 150 +150 151 +152 150 +151 152 +154 155 +155 154 +155 154 +154 155 +154 155 +155 154 +154 155 +154 155 +155 154 +154 155 +154 155 +155 154 +154 155 +155 154 +155 154 +154 155 +157 158 +156 157 +157 156 +156 157 +158 156 +158 157 +157 158 +156 157 +158 157 +158 157 +157 156 +156 157 +156 158 +161 163 +159 160 +163 162 +159 160 +160 159 +160 162 +161 159 +162 159 +163 160 +160 162 +160 163 +159 162 +159 162 +161 163 +167 166 +168 167 +168 164 +165 167 +168 164 +167 166 +166 168 +164 166 +164 166 +165 168 +167 168 +170 172 +172 170 +169 172 +169 170 +170 169 +169 170 +170 172 +169 172 +171 172 +170 169 +171 169 +171 172 +172 170 +170 169 +171 172 +172 169 +172 170 +169 172 +172 171 +172 171 +176 174 +176 173 +174 175 +174 175 +173 174 +175 176 +174 173 +174 176 +176 175 +175 176 +174 173 +175 174 +174 175 +174 176 +176 173 +176 174 +173 174 +175 176 +181 178 +179 177 +177 178 +181 178 +181 178 +180 179 +179 180 +180 178 +181 180 +181 180 +181 177 +180 181 +182 184 +184 183 +182 184 +183 184 +183 182 +183 182 +184 183 +182 184 +182 184 +182 184 +184 183 +184 182 +182 183 +184 183 +184 182 +185 187 +186 188 +186 188 +189 188 +189 186 +189 185 +189 185 +185 188 +189 186 +187 189 +186 187 +186 187 +190 191 +191 190 +191 190 +191 190 +191 190 +191 190 +190 191 +190 191 +190 191 +190 191 +190 191 +191 190 +190 191 +191 190 +191 190 +191 190 +192 193 +193 195 +194 193 +193 192 +192 193 +193 192 +195 194 +192 193 +194 195 +194 192 +194 195 +193 194 +192 193 +192 193 +195 194 +195 194 +197 196 +197 196 +196 197 +196 197 +197 196 +196 197 +197 196 +197 196 +197 196 +196 197 +197 196 +197 196 +197 196 +196 197 +196 197 +199 198 +202 199 +199 202 +202 198 +200 198 +202 200 +200 201 +200 201 +200 202 +200 201 +199 202 +202 199 +202 201 +204 203 +203 204 +203 204 +203 204 +204 203 +203 204 +203 204 +204 203 +203 204 +204 203 +204 203 +204 203 +203 204 +203 204 +204 203 +205 206 +205 207 +206 207 +205 207 +207 205 +206 205 +205 207 +207 205 +205 206 +206 205 +205 206 +207 205 +206 207 +206 205 +205 207 +207 205 +207 206 +207 205 +207 205 +207 205 +208 209 +208 209 +208 209 +208 209 +208 209 +209 208 +209 208 +209 208 +208 209 +209 208 +209 208 +208 209 +209 208 +208 209 +208 209 +208 209 +208 209 +214 212 +211 210 +212 213 +213 211 +213 214 +213 211 +214 210 +214 213 +212 213 +213 214 +211 214 +213 212 +211 213 +214 213 +210 211 +213 212 +214 212 +211 210 +214 210 +210 212 +217 215 +217 215 +219 217 +217 216 +217 218 +215 216 +219 218 +218 219 +219 215 +219 215 +217 218 +222 220 +222 221 +221 220 +220 222 +221 220 +221 222 +220 221 +220 222 +220 221 +221 220 +222 221 +220 222 +222 220 +221 222 +223 225 +227 224 +226 223 +226 224 +226 223 +227 224 +226 225 +227 226 +226 223 +223 226 +230 228 +229 228 +230 228 +230 228 +230 228 +228 230 +230 228 +230 229 +230 229 +230 228 +230 228 +230 229 +230 229 +231 232 +232 231 +232 231 +232 231 +231 232 +232 231 +231 232 +231 232 +231 232 +232 231 +232 231 +231 232 +232 231 +232 231 +232 231 +231 232 +231 232 +233 234 +234 233 +234 233 +233 234 +233 234 +234 233 +234 233 +234 233 +233 234 +234 233 +234 233 +233 234 +234 233 +233 234 +233 234 +234 233 +233 234 +236 237 +236 235 +237 236 +236 237 +236 235 +235 237 +237 236 +235 236 +235 236 +235 236 +242 238 +242 239 +238 240 +241 240 +239 242 +241 239 +239 241 +242 238 +242 239 +239 241 +241 239 +239 242 +241 239 +239 240 +239 238 +247 243 +243 245 +245 244 +243 244 +247 243 +244 243 +245 243 +243 246 +245 244 +245 244 +244 246 +245 244 +245 247 +243 244 +246 243 +244 243 +243 244 +246 247 +249 251 +252 248 +251 249 +252 248 +248 250 +250 252 +250 248 +248 250 +250 248 +251 248 +252 250 +249 250 +252 248 +248 251 +248 249 +248 251 +255 253 +253 255 +255 254 +254 255 +254 255 +255 253 +254 255 +253 254 +253 254 +255 253 +253 255 +255 253 +253 255 +253 255 +254 253 +257 256 +256 257 +257 256 +256 257 +257 256 +256 257 +257 256 +257 256 +257 256 +257 256 +257 256 +257 256 +256 257 +257 256 +257 256 +256 257 +256 257 +259 260 +259 258 +260 259 +259 260 +258 260 +258 259 +258 260 +258 260 +259 258 +259 260 +260 259 +259 260 +259 260 +261 262 +262 261 +262 261 +262 261 +261 262 +262 261 +262 261 +261 262 +261 262 +261 262 +262 261 +261 262 +262 261 +261 262 +261 262 +261 262 +262 261 +266 265 +263 264 +266 263 +265 266 +265 264 +265 266 +265 264 +264 266 +264 263 +263 264 +266 264 +265 264 +263 266 +266 264 +266 265 +266 265 +263 264 +264 263 +270 267 +269 270 +268 270 +267 268 +267 268 +268 269 +270 269 +270 267 +269 270 +270 269 +268 267 +270 267 +270 269 +267 270 +267 270 +268 269 +271 272 +271 272 +272 271 +272 271 +272 271 +272 271 +272 271 +272 271 +271 272 +272 271 +271 272 +271 272 +271 272 +272 271 +272 271 +271 272 +272 271 +271 272 +274 273 +273 274 +274 273 +273 274 +273 274 +274 273 +274 273 +274 273 +274 273 +273 274 +273 274 +273 274 +274 273 +273 274 +274 273 +273 274 +273 274 +274 273 +273 274 +273 274 +277 276 +278 275 +276 278 +275 278 +275 277 +277 275 +277 275 +278 276 +277 276 +278 277 +277 276 +277 276 +278 276 +275 278 +277 275 +280 281 +281 279 +279 280 +279 280 +279 281 +279 281 +280 279 +280 279 +279 280 +279 280 +280 279 +279 280 +280 279 +281 280 +279 281 +279 281 +279 281 +279 281 +284 283 +282 285 +282 285 +284 286 +286 283 +285 282 +286 285 +283 284 +282 286 +283 286 +284 283 +283 282 +284 285 +284 286 +284 285 +284 283 +284 286 +285 286 +285 286 +289 287 +288 287 +288 287 +289 288 +288 287 +288 287 +288 289 +288 289 +288 287 +289 288 +289 287 +291 292 +291 290 +290 292 +290 291 +292 291 +292 291 +290 292 +291 292 +292 290 +291 292 +291 290 +291 292 +291 290 +292 290 +295 293 +295 296 +295 294 +295 294 +294 293 +293 295 +293 294 +293 294 +296 295 +296 295 +294 296 +295 294 +295 294 +296 294 +294 296 +293 294 +295 293 +295 296 +299 297 +299 298 +297 299 +299 297 +298 299 +298 297 +299 298 +299 298 +299 297 +298 299 +298 299 +298 297 +297 298 +297 298 +298 297 +299 298 +298 299 +300 301 +301 300 +300 301 +301 300 +301 300 +300 301 +300 301 +301 300 +300 301 +300 301 +300 301 +300 301 +301 300 +300 301 +303 305 +303 302 +303 305 +304 303 +304 305 +303 302 +305 304 +304 303 +304 303 +304 305 +303 305 +304 305 +302 303 +304 302 +303 302 +304 302 +305 304 +306 307 +307 306 +306 307 +307 306 +306 307 +307 306 +307 306 +307 306 +306 307 +307 306 +306 307 +306 307 +306 307 +306 307 +306 307 +306 307 +306 307 +307 306 +309 310 +310 311 +308 311 +308 311 +309 310 +309 310 +308 311 +309 311 +311 308 +308 309 +309 311 +309 311 +311 309 +310 311 +313 315 +315 312 +315 316 +312 313 +314 312 +313 315 +315 312 +313 316 +313 312 +315 314 +317 319 +317 319 +318 317 +318 319 +319 318 +319 317 +317 318 +319 318 +319 318 +318 319 +319 317 +317 318 +317 319 +318 317 +318 317 +317 318 +318 319 +319 317 +319 317 +322 320 +320 321 +320 322 +320 321 +321 320 +321 320 +320 321 +322 320 +320 321 +321 320 +321 320 +320 321 +320 322 +320 321 +321 322 +321 322 +321 322 +324 323 +324 323 +323 324 +324 323 +323 324 +324 323 +324 323 +324 323 +324 323 +324 323 +323 324 +328 325 +327 325 +327 326 +325 328 +325 327 +326 325 +325 326 +328 327 +328 327 +325 328 +325 326 +325 328 +326 325 +328 327 +325 328 +325 328 +325 327 +325 328 +325 328 +333 329 +331 333 +333 331 +329 332 +332 330 +329 332 +329 333 +331 329 +329 331 +332 331 +333 330 +332 330 +332 330 +331 333 +329 332 +333 330 +333 331 +333 331 +334 335 +336 334 +336 334 +334 335 +334 335 +334 336 +335 334 +334 336 +336 334 +334 335 +335 334 +334 335 +336 335 +335 336 +336 335 +341 338 +338 339 +339 341 +340 338 +340 338 +339 341 +337 339 +340 337 +339 337 +341 340 +342 343 +343 342 +342 343 +343 342 +343 342 +343 342 +343 342 +343 342 +343 342 +343 342 +343 342 +343 342 +343 342 +343 342 +342 343 +342 343 +346 344 +348 344 +346 347 +346 347 +347 346 +344 348 +346 344 +344 348 +346 345 +346 348 +346 345 +344 348 +345 347 +346 345 +344 348 +346 348 +348 346 +345 346 +349 350 +349 350 +349 350 +350 349 +349 350 +350 349 +350 349 +349 350 +349 350 +350 349 +349 350 +349 350 +350 349 +349 350 +349 350 +349 350 +349 350 +352 353 +353 351 +351 354 +352 354 +352 354 +352 351 +354 352 +354 351 +352 351 +354 352 +352 351 +353 351 +352 353 +351 353 +358 359 +355 358 +359 357 +355 358 +358 359 +357 358 +355 358 +359 358 +357 359 +357 355 +361 360 +360 361 +360 361 +361 360 +361 360 +360 361 +360 361 +361 360 +361 360 +360 361 +360 361 +360 361 +360 361 +361 360 +360 361 +360 361 +360 361 +362 363 +365 366 +364 363 +364 366 +366 364 +362 366 +364 363 +362 366 +362 366 +365 366 +364 366 +363 365 +365 363 +364 362 +364 366 +363 364 +364 366 +368 367 +368 369 +367 368 +370 368 +370 369 +369 370 +370 368 +368 370 +369 368 +368 370 +368 367 +367 368 +370 367 +370 367 +371 372 +371 372 +371 372 +372 371 +372 371 +371 372 +372 371 +372 371 +372 371 +371 372 +371 372 +372 371 +371 372 +371 372 +371 372 +371 372 +371 372 +375 374 +375 373 +375 373 +375 374 +375 373 +374 373 +373 374 +374 373 +374 375 +374 373 +375 374 +373 375 +373 375 +375 373 +373 374 +375 374 +373 375 +374 373 +373 375 +377 376 +376 377 +376 377 +376 377 +377 376 +376 377 +377 376 +376 377 +376 377 +377 376 +376 377 +377 376 +378 380 +378 379 +380 379 +379 378 +378 379 +380 379 +379 378 +378 379 +380 379 +378 379 +380 378 +378 380 +379 380 +379 380 +380 378 +382 381 +382 381 +382 381 +382 381 +382 381 +382 381 +382 381 +382 381 +382 381 +382 381 +382 381 +382 381 +381 382 +382 381 +384 383 +383 384 +383 384 +383 384 +384 383 +384 383 +384 383 +384 383 +384 383 +384 383 +383 384 +384 383 +383 384 +383 384 +384 383 +386 387 +386 387 +386 385 +385 387 +385 387 +387 385 +387 385 +385 386 +387 386 +387 386 +385 387 +385 387 +386 387 +389 390 +388 390 +390 389 +389 390 +389 388 +390 388 +390 388 +388 390 +389 390 +388 390 +390 389 +389 388 +390 388 +388 389 +388 390 +388 389 +390 388 +389 388 +388 390 +389 388 +391 392 +391 394 +393 394 +392 394 +391 392 +391 392 +391 394 +393 394 +394 391 +394 393 +395 396 +397 399 +395 397 +395 397 +396 395 +399 395 +396 397 +399 398 +396 397 +397 396 +402 400 +401 402 +400 403 +403 401 +401 404 +402 401 +401 404 +401 402 +404 401 +401 402 +401 403 +401 400 +401 400 +401 404 +407 408 +406 409 +407 406 +406 407 +408 405 +408 406 +408 405 +407 409 +407 406 +406 407 +408 406 +405 409 +407 408 +406 407 +411 410 +411 412 +411 410 +412 410 +411 412 +411 410 +411 412 +411 410 +411 412 +410 412 +411 412 +410 412 +410 412 +410 412 +414 413 +413 414 +414 413 +413 414 +414 413 +414 413 +414 413 +414 413 +413 414 +413 414 +414 413 +413 414 +413 414 +413 414 +414 413 +415 416 +415 416 +416 415 +415 416 +416 415 +416 415 +415 416 +415 416 +415 416 +415 416 +415 416 +415 416 +416 415 +415 416 +415 416 +415 416 +416 415 +415 416 +418 417 +418 417 +420 419 +418 419 +418 420 +419 420 +417 418 +419 420 +420 418 +420 418 +420 418 +419 418 +418 417 +418 420 +421 422 +421 422 +422 421 +421 422 +421 422 +422 421 +421 422 +421 422 +421 422 +421 422 +421 422 +421 422 +422 421 +425 424 +423 424 +425 424 +425 423 +423 424 +425 424 +423 425 +424 425 +425 423 +425 424 +425 424 +425 424 +424 425 +427 428 +426 427 +428 427 +430 426 +426 428 +427 426 +426 429 +428 427 +429 426 +426 427 +426 428 +427 428 +427 428 +429 426 +430 426 +429 430 +426 430 +428 427 +431 432 +431 432 +431 432 +432 431 +432 431 +432 431 +431 432 +431 432 +431 432 +432 431 +431 432 +431 432 +432 431 +431 432 +432 431 +431 432 +432 431 +434 436 +434 433 +434 436 +434 436 +434 433 +436 434 +436 433 +436 435 +436 435 +435 436 +434 436 +433 436 +436 433 +435 436 +434 433 +435 434 +440 437 +440 439 +438 439 +438 441 +437 439 +440 439 +439 440 +437 441 +438 441 +437 441 +441 440 +439 440 +440 437 +441 438 +438 439 +437 439 +439 437 +438 441 +440 438 +446 442 +443 446 +444 445 +445 442 +446 442 +445 446 +444 445 +445 444 +444 443 +445 446 +442 445 +446 444 +444 443 +448 449 +450 448 +449 450 +448 450 +447 450 +447 449 +451 450 +448 450 +450 451 +448 449 +450 449 +450 448 +447 451 +449 450 +453 454 +452 453 +453 452 +453 452 +453 454 +452 453 +452 454 +452 454 +453 452 +453 454 +453 452 +454 453 +452 454 +453 454 +454 452 +456 455 +455 456 +455 456 +455 456 +456 455 +456 455 +456 455 +455 456 +455 456 +456 455 +455 456 +456 455 +458 461 +459 458 +457 461 +461 459 +459 458 +461 458 +461 457 +458 457 +459 461 +460 459 +462 463 +464 462 +463 464 +463 464 +463 464 +463 462 +462 463 +462 464 +463 464 +463 462 +464 463 +463 462 +463 464 +462 464 +462 463 +462 463 +464 463 +464 463 +464 462 +467 468 +467 468 +465 467 +467 466 +468 467 +467 466 +468 467 +466 467 +468 466 +466 465 +467 465 +466 465 +468 467 +471 469 +472 470 +471 470 +470 471 +471 472 +470 472 +472 471 +471 472 +470 471 +472 471 +471 469 +470 472 +471 470 +470 471 +471 472 +472 471 +475 473 +475 476 +474 475 +475 473 +474 473 +474 476 +475 474 +475 473 +475 474 +473 474 +476 474 +475 474 +474 475 +475 473 +475 476 +476 474 +474 473 +475 476 +473 475 +474 475 +478 479 +478 479 +478 479 +478 477 +479 477 +478 477 +477 478 +478 479 +477 478 +477 479 +478 479 +478 477 +478 479 +479 478 +477 478 +479 477 +481 483 +480 482 +482 481 +480 482 +481 483 +482 480 +480 481 +483 482 +481 483 +481 483 +481 483 +481 482 +482 481 +482 480 +481 483 +480 482 +480 481 +485 484 +484 485 +484 485 +485 484 +485 484 +485 484 +485 484 +484 485 +485 484 +484 485 +484 485 +485 484 +486 487 +487 486 +486 488 +487 488 +488 487 +486 487 +486 487 +487 486 +486 487 +487 488 +488 487 +486 487 +493 490 +493 492 +491 492 +491 492 +493 492 +492 490 +491 489 +492 490 +490 492 +490 491 +489 493 +489 492 +491 490 +492 491 +493 492 +493 490 +489 493 +492 493 +489 491 +495 498 +497 494 +497 494 +497 498 +495 498 +496 494 +494 496 +494 496 +498 497 +496 497 +498 494 +494 496 +497 498 +494 496 +494 498 +501 499 +499 502 +499 502 +500 499 +502 499 +500 499 +500 499 +499 500 +500 502 +499 502 +500 499 +501 500 +499 500 +500 501 +499 500 +502 499 +500 499 +502 499 +504 505 +506 503 +504 505 +503 504 +504 505 +503 506 +503 505 +506 503 +503 505 +506 505 +504 503 +503 505 +503 505 +505 503 +503 504 +508 510 +507 508 +510 508 +509 510 +510 507 +510 508 +507 508 +509 508 +508 510 +509 510 +508 510 +509 510 +508 509 +510 507 +510 509 +513 511 +512 515 +512 515 +513 512 +511 513 +515 514 +515 512 +511 514 +514 513 +512 515 +511 515 +513 514 +515 512 +515 511 +512 513 +514 513 +516 519 +519 516 +516 519 +517 516 +517 518 +518 517 +518 517 +516 518 +516 519 +518 517 +519 518 +517 516 +517 518 +519 518 +517 518 +519 516 +522 523 +523 521 +523 520 +521 522 +522 521 +520 523 +523 520 +523 521 +523 520 +521 522 +523 522 +520 522 +524 526 +524 525 +525 524 +524 526 +527 524 +527 524 +524 526 +524 525 +524 527 +524 525 +525 526 +525 524 +526 525 +525 524 +524 525 +527 526 +524 527 +526 525 +527 524 +528 529 +528 529 +528 529 +528 529 +529 528 +529 528 +529 528 +529 528 +528 529 +529 528 +532 531 +530 531 +531 532 +530 531 +531 530 +530 531 +532 530 +532 530 +532 531 +530 531 +531 532 +530 531 +530 531 +531 532 +530 531 +530 532 +531 530 +531 530 +533 535 +535 534 +534 535 +533 534 +533 535 +534 533 +533 535 +535 534 +534 533 +534 535 +537 536 +537 536 +537 536 +537 536 +537 536 +537 536 +536 537 +536 537 +537 536 +536 537 +537 536 +537 536 +537 536 +536 537 +536 537 +539 540 +539 540 +540 538 +539 541 +540 539 +539 540 +540 539 +541 540 +540 539 +538 541 +538 540 +541 538 +541 539 +540 538 +539 540 +543 544 +543 542 +542 543 +542 544 +544 542 +543 544 +543 544 +542 544 +543 542 +543 542 +542 543 +542 544 +542 544 +543 542 +544 543 +542 544 +543 544 +544 542 +546 549 +546 548 +547 545 +546 548 +549 548 +547 545 +546 548 +545 546 +546 548 +546 548 +548 549 +545 548 +549 546 +547 549 +549 548 +546 549 +546 549 +548 545 +551 550 +550 551 +550 551 +551 550 +550 551 +550 551 +551 550 +550 551 +551 550 +551 550 +553 552 +553 552 +552 553 +553 552 +553 552 +552 553 +553 552 +553 552 +552 553 +553 552 +556 554 +557 555 +556 557 +556 555 +554 556 +554 556 +555 557 +557 556 +554 556 +557 556 +554 556 +555 556 +557 555 +555 556 +555 557 +557 554 +557 556 +556 555 +555 556 +558 559 +558 559 +559 558 +559 558 +559 558 +558 559 +558 559 +558 559 +558 559 +559 558 +560 564 +564 563 +563 564 +560 564 +562 561 +561 564 +560 562 +564 561 +561 562 +563 561 +560 562 +563 560 +567 565 +567 566 +566 567 +565 566 +565 567 +566 565 +566 565 +567 566 +566 567 +566 567 +565 566 +565 567 +565 567 +569 570 +569 568 +568 569 +568 569 +569 570 +568 570 +568 570 +569 568 +568 569 +569 570 +568 570 +570 569 +568 570 +569 570 +571 572 +572 571 +572 571 +572 571 +572 571 +572 571 +572 571 +571 572 +571 572 +572 571 +571 572 +571 572 +571 572 +572 571 +572 571 +571 572 +572 571 +576 574 +575 577 +573 576 +576 575 +574 577 +574 577 +575 576 +574 576 +576 577 +577 573 +577 576 +574 576 +577 575 +579 578 +579 578 +579 578 +579 578 +579 578 +578 579 +579 578 +578 579 +578 579 +578 579 +579 578 +578 579 +579 578 +579 578 +578 579 +579 578 +579 578 +579 578 +578 579 +579 578 +583 581 +580 583 +580 583 +580 582 +583 581 +581 583 +582 580 +583 581 +582 583 +581 580 +580 583 +584 586 +586 584 +586 585 +586 585 +586 585 +584 586 +586 585 +585 584 +586 585 +585 584 +585 586 +586 584 +584 586 +584 586 +585 586 +586 585 +585 584 +586 585 +585 586 +585 586 +587 589 +589 588 +591 589 +591 589 +587 589 +587 591 +589 591 +591 587 +591 587 +589 591 +589 590 +591 587 +587 591 +587 591 +588 587 +589 588 +587 589 +591 587 +595 593 +593 592 +594 592 +595 594 +595 593 +593 594 +593 595 +594 593 +593 592 +592 593 +592 594 +593 592 +598 596 +598 596 +597 599 +597 598 +597 599 +598 596 +599 598 +599 598 +599 597 +596 597 +599 597 +598 599 +597 596 +598 596 +597 598 +596 597 +597 598 +601 600 +602 600 +601 602 +600 602 +602 601 +602 601 +600 601 +602 600 +602 601 +602 600 +602 600 +600 602 +602 601 +602 601 +603 605 +605 603 +603 604 +605 606 +605 606 +606 605 +603 605 +606 604 +606 605 +605 606 +605 606 +606 604 +604 606 +605 603 +607 608 +607 608 +607 608 +608 607 +608 607 +608 607 +608 607 +607 608 +607 608 +607 608 +607 608 +608 607 +608 607 +607 608 +607 608 +608 607 +608 607 +610 609 +609 610 +610 609 +610 609 +610 609 +610 609 +610 609 +610 609 +609 610 +609 610 +609 610 +610 609 +611 612 +611 612 +611 613 +613 612 +611 613 +612 613 +613 612 +613 611 +613 612 +612 613 +612 613 +617 615 +616 617 +617 615 +615 617 +616 617 +616 614 +615 616 +617 616 +616 615 +614 615 +616 617 +616 614 +614 616 +616 615 +615 617 +616 614 +616 614 +615 614 +619 618 +619 618 +618 619 +618 619 +618 619 +618 619 +618 619 +619 618 +618 619 +619 618 +618 619 +618 619 +618 619 +618 619 +619 618 +618 619 +619 618 +621 620 +621 620 +621 620 +620 621 +621 620 +621 620 +621 620 +621 620 +621 620 +620 621 +620 621 +620 621 +620 621 +621 620 +621 620 +621 620 +621 620 +623 626 +625 622 +626 623 +626 625 +623 624 +624 626 +626 625 +623 625 +622 625 +624 626 +623 626 +626 623 +622 623 +625 622 +629 628 +628 629 +627 629 +629 627 +629 628 +628 629 +627 629 +627 628 +627 629 +628 627 +628 627 +628 627 +628 627 +627 629 +627 629 +627 628 +629 627 +631 630 +634 631 +633 630 +632 634 +632 634 +632 633 +631 634 +633 632 +632 630 +630 633 +634 631 +630 632 +633 630 +633 630 +633 631 +634 633 +632 633 +631 630 +636 637 +635 637 +635 636 +636 637 +635 637 +637 635 +636 635 +635 637 +637 635 +637 635 +638 640 +640 639 +638 639 +640 639 +638 639 +638 639 +638 639 +639 640 +640 639 +640 638 +639 638 +638 639 +640 639 +639 638 +639 640 +640 638 +638 640 +639 640 +639 638 +640 638 +645 641 +644 642 +644 642 +645 641 +641 643 +641 643 +641 642 +643 642 +642 645 +645 641 +642 644 +641 642 +642 644 +645 641 +642 641 +650 648 +650 649 +646 647 +647 648 +646 650 +646 650 +650 649 +649 646 +646 650 +646 648 +647 646 +650 649 +648 646 +652 654 +652 653 +652 651 +652 654 +653 654 +651 652 +654 652 +651 653 +651 652 +652 653 +652 653 +651 652 +651 653 +654 653 +651 653 +653 654 +656 655 +656 655 +655 656 +656 655 +655 656 +655 656 +655 656 +655 656 +655 656 +655 656 +656 655 +660 659 +659 657 +658 657 +658 657 +658 657 +657 658 +657 659 +659 660 +660 657 +660 657 +661 663 +663 662 +663 662 +663 662 +661 662 +663 662 +662 661 +661 662 +662 663 +663 661 +663 662 +661 662 +663 661 +661 663 +662 661 +661 662 +662 663 +667 666 +664 666 +667 666 +667 666 +666 667 +666 668 +664 665 +668 664 +667 665 +664 665 +668 667 +665 664 +666 664 +667 668 +666 665 +672 669 +669 670 +671 672 +672 669 +670 671 +671 670 +671 669 +670 671 +671 669 +669 670 +669 671 +675 673 +675 674 +673 675 +673 675 +674 673 +675 673 +674 673 +674 675 +673 675 +674 673 +674 673 +673 675 +673 674 +675 674 +673 675 +677 676 +677 676 +676 677 +676 677 +677 676 +677 676 +676 677 +677 676 +677 676 +676 677 +677 676 +676 677 +677 676 +677 676 +676 677 +676 677 +676 677 +677 676 +680 681 +678 681 +681 680 +681 680 +681 678 +678 681 +678 679 +681 678 +679 681 +678 679 +678 680 +680 681 +679 681 +681 679 +684 682 +683 684 +684 682 +683 684 +684 682 +684 683 +682 684 +682 684 +684 683 +682 684 +684 683 +684 682 +682 683 +684 682 +684 682 +686 685 +685 686 +685 686 +685 686 +686 685 +686 685 +685 686 +686 685 +686 685 +685 686 +686 685 +686 685 +685 686 +690 687 +688 689 +690 688 +688 689 +690 688 +688 690 +690 689 +688 689 +689 690 +688 687 +687 690 +687 688 +687 688 +692 693 +691 693 +692 693 +693 691 +691 693 +693 691 +693 691 +693 691 +692 693 +693 691 +693 692 +691 692 +693 691 +692 691 +691 692 +692 691 +693 691 +693 692 +691 692 +692 693 +698 695 +696 694 +698 694 +694 695 +697 695 +696 698 +694 696 +696 694 +694 695 +695 698 +694 698 +694 698 +694 695 +694 696 +696 694 +696 698 +696 697 +696 697 +697 696 +700 699 +700 699 +700 699 +699 700 +699 700 +700 699 +700 699 +700 699 +700 699 +700 699 +699 700 +699 700 +699 700 +700 699 +700 699 +700 699 +704 703 +701 704 +704 701 +701 702 +704 702 +704 703 +703 704 +701 702 +701 703 +701 704 +702 701 +703 701 +701 702 +703 701 +708 709 +709 707 +706 709 +707 706 +709 706 +708 705 +707 708 +709 707 +708 707 +706 707 +705 709 +707 706 +706 707 +707 709 +709 706 +708 709 +712 711 +712 711 +712 710 +712 710 +711 710 +711 712 +711 710 +711 712 +712 711 +710 711 +711 710 +712 711 +715 714 +715 717 +715 717 +716 714 +714 713 +714 717 +716 714 +717 714 +716 713 +713 716 +716 715 +716 714 +716 715 +713 714 +721 719 +720 721 +720 721 +721 720 +718 719 +719 718 +718 719 +721 720 +720 719 +718 721 +720 719 +719 718 +718 719 +721 719 +719 721 +725 726 +726 725 +726 724 +722 725 +726 725 +723 726 +724 726 +722 725 +725 722 +722 726 +725 722 +724 722 +727 729 +728 729 +729 728 +729 728 +727 728 +728 727 +727 728 +727 728 +728 729 +727 728 +728 727 +729 728 +729 727 +728 727 +727 728 +727 728 +727 728 +728 729 +729 728 +730 731 +730 731 +730 731 +731 730 +731 730 +731 730 +730 731 +730 731 +731 730 +730 731 +733 732 +733 732 +733 732 +733 732 +732 733 +733 732 +733 732 +732 733 +733 732 +732 733 +737 734 +734 735 +734 737 +734 736 +735 734 +734 736 +736 734 +734 736 +735 734 +735 736 +735 736 +737 736 +734 737 +737 736 +735 734 +739 738 +739 738 +740 738 +738 740 +739 740 +739 738 +739 738 +740 739 +738 739 +739 738 +740 739 +742 743 +742 743 +743 741 +741 742 +741 742 +742 743 +742 741 +742 743 +743 741 +743 742 +743 741 +742 743 +742 741 +741 743 +741 743 +743 742 +742 743 +743 742 +745 744 +746 744 +745 744 +746 744 +744 746 +744 745 +744 745 +744 745 +744 746 +745 746 +744 745 +745 744 +744 746 +745 744 +746 744 +749 748 +751 747 +749 748 +750 748 +749 748 +750 749 +750 751 +747 751 +749 751 +747 749 +754 755 +753 752 +755 754 +753 754 +754 753 +754 753 +754 755 +754 755 +753 752 +753 755 +753 755 +752 754 +754 752 +754 755 +754 752 +754 755 +752 753 +754 753 +753 755 +754 753 +758 757 +758 757 +758 757 +756 757 +757 756 +756 758 +757 756 +757 756 +756 757 +758 757 +758 757 +757 758 +761 759 +759 763 +759 763 +762 761 +760 762 +760 759 +761 759 +761 762 +762 763 +759 763 +764 765 +764 765 +765 764 +765 764 +765 764 +765 764 +765 764 +765 764 +765 764 +765 764 +764 765 +770 768 +766 768 +768 770 +770 766 +769 770 +767 769 +769 768 +770 768 +766 768 +768 770 +767 769 +767 766 +766 770 +771 772 +771 772 +772 771 +772 771 +771 772 +772 771 +771 772 +771 772 +772 771 +772 771 +771 772 +774 773 +774 775 +775 773 +775 773 +774 775 +773 775 +774 773 +773 775 +775 773 +774 775 +775 773 +773 774 +774 775 +775 774 +773 775 +773 775 +774 773 +774 775 +774 775 +777 776 +776 777 +777 776 +777 776 +777 776 +776 777 +776 777 +776 777 +776 777 +777 776 +777 776 +777 776 +776 777 +777 776 +777 776 +776 777 +776 777 +777 776 +776 777 +778 779 +779 778 +780 778 +779 780 +779 778 +779 780 +779 780 +779 778 +778 780 +779 778 +780 779 +779 780 +778 780 +782 781 +783 782 +783 781 +783 781 +784 782 +781 785 +781 782 +784 782 +782 781 +781 785 +784 781 +784 781 +783 782 +789 787 +789 787 +786 788 +787 786 +787 789 +789 786 +787 786 +789 786 +787 789 +789 788 +789 787 +786 788 +787 789 +786 788 +786 787 +786 789 +788 786 +789 788 +786 789 +787 786 +790 791 +791 790 +790 791 +791 790 +791 790 +790 791 +791 790 +791 790 +790 791 +790 791 +791 790 +791 790 +794 795 +792 796 +792 794 +795 793 +795 794 +794 792 +792 793 +795 793 +795 794 +793 794 +796 793 +796 795 +792 796 +792 794 +792 793 +794 795 +797 799 +797 799 +800 799 +801 799 +801 798 +800 801 +799 798 +797 799 +798 799 +799 797 +799 801 +801 798 +799 797 +799 801 +797 800 +798 801 +800 799 +797 800 +797 800 +803 802 +802 803 +803 802 +803 802 +803 802 +802 803 +802 803 +803 802 +803 802 +802 803 +807 805 +807 805 +805 804 +807 806 +805 806 +805 804 +807 806 +807 806 +806 807 +805 806 +806 807 +806 805 +807 806 +806 805 +812 809 +809 810 +808 810 +810 809 +809 811 +810 811 +808 811 +811 810 +812 808 +812 809 +813 814 +813 814 +813 814 +813 814 +813 814 +813 814 +814 813 +813 814 +813 814 +814 813 +814 813 +815 816 +815 816 +816 815 +816 815 +815 816 +816 815 +816 815 +815 816 +815 816 +815 816 +816 815 +816 815 +816 815 +815 816 +817 818 +817 818 +817 818 +817 818 +818 817 +817 818 +818 817 +818 817 +817 818 +818 817 +821 819 +819 821 +819 820 +820 822 +820 822 +821 820 +822 820 +821 820 +819 820 +822 820 +819 820 +819 820 +819 821 +819 821 +822 821 +820 822 +819 821 +821 822 +822 820 +823 825 +825 824 +823 825 +824 823 +823 824 +824 823 +823 825 +824 825 +823 824 +824 823 +823 824 +826 827 +827 826 +827 829 +827 829 +829 827 +827 829 +826 829 +827 828 +826 828 +826 828 +826 829 +831 830 +831 832 +831 830 +832 831 +830 832 +831 832 +832 831 +831 830 +831 830 +830 832 +832 831 +832 831 +830 831 +832 831 +831 830 +834 833 +833 835 +833 835 +835 833 +835 833 +835 834 +834 835 +835 834 +834 833 +833 835 +834 833 +835 833 +839 838 +838 839 +837 838 +837 838 +839 836 +836 838 +838 839 +837 840 +840 836 +837 839 +837 840 +840 836 +836 840 +840 837 +840 837 +840 838 +838 839 +842 843 +842 844 +843 841 +841 844 +843 844 +844 842 +843 844 +843 841 +844 841 +843 841 +843 844 +848 847 +848 847 +848 846 +848 845 +845 848 +846 845 +848 846 +845 848 +845 846 +845 846 +845 846 +845 847 +848 847 +848 846 +850 852 +849 850 +851 853 +853 851 +850 852 +850 851 +851 853 +850 852 +853 852 +853 851 +851 850 +849 851 +849 850 +849 853 +849 853 +852 851 +850 851 +850 852 +852 853 +854 855 +855 854 +855 854 +854 855 +855 854 +854 855 +854 855 +854 855 +854 855 +854 855 +854 855 +854 855 +854 855 +855 854 +854 855 +854 855 +855 854 +855 854 +855 854 +859 857 +859 857 +858 859 +857 856 +856 858 +857 859 +859 858 +856 859 +859 856 +857 859 +858 859 +858 856 +858 856 +856 857 +858 859 +858 856 +857 859 +858 859 +862 860 +861 860 +862 861 +861 860 +861 862 +861 860 +861 860 +860 861 +862 860 +861 862 +866 864 +864 866 +867 865 +864 866 +864 867 +866 867 +865 863 +863 866 +863 866 +863 867 +863 865 +863 867 +867 865 +865 867 +867 864 +865 867 +866 863 +864 865 +868 869 +868 869 +868 869 +869 868 +868 869 +868 869 +869 868 +869 868 +868 869 +869 868 +868 869 +872 870 +873 870 +871 872 +870 873 +870 871 +873 872 +873 870 +872 871 +870 872 +871 872 +873 872 +870 873 +876 878 +876 875 +878 875 +877 874 +876 878 +877 874 +875 878 +877 878 +878 874 +874 878 +878 875 +876 874 +878 874 +877 874 +876 874 +875 877 +874 878 +878 877 +877 874 +883 879 +883 879 +883 882 +883 879 +882 883 +882 883 +879 881 +882 879 +880 883 +882 881 +880 881 +881 879 +883 882 +888 886 +886 884 +887 888 +884 887 +886 884 +887 886 +886 888 +888 885 +886 887 +885 884 +888 886 +885 888 +890 891 +890 892 +891 889 +891 890 +889 891 +890 889 +891 889 +890 891 +892 891 +891 892 +892 890 +892 890 +892 891 +890 889 +890 889 +893 895 +896 895 +896 894 +896 897 +894 895 +893 895 +895 896 +894 896 +896 897 +894 895 +897 893 +895 896 +895 896 +893 895 +894 893 +893 897 +894 895 +897 894 +894 893 +898 899 +898 899 +898 899 +899 898 +898 899 +899 898 +898 899 +899 898 +899 898 +898 899 +902 904 +902 904 +901 903 +903 902 +902 901 +900 904 +904 902 +902 904 +901 903 +904 902 +902 903 +901 904 +902 903 +901 902 +904 901 +906 908 +905 908 +905 907 +905 907 +908 905 +905 906 +908 906 +905 908 +908 906 +908 907 +905 907 +907 905 +905 908 +908 907 +908 905 +905 906 +906 908 +907 908 +910 909 +910 909 +909 910 +909 910 +910 909 +910 909 +910 909 +909 910 +909 910 +909 910 +910 909 +909 910 +910 909 +910 909 +910 909 +910 909 +910 909 +909 910 +909 910 +909 910 +913 912 +914 915 +911 915 +913 911 +914 915 +913 911 +915 911 +915 912 +913 912 +912 914 +914 913 +915 911 +914 915 +913 914 +916 917 +917 916 +916 917 +916 917 +916 917 +916 917 +916 917 +916 917 +916 917 +917 916 +916 917 +919 918 +918 919 +918 919 +918 919 +919 918 +919 918 +918 919 +919 918 +918 919 +918 919 +918 919 +918 919 +919 918 +919 918 +918 919 +918 919 +919 918 +918 919 +919 918 +919 918 +922 921 +922 923 +920 923 +922 923 +920 923 +921 923 +920 922 +923 922 +922 923 +920 922 +922 921 +923 922 +923 922 +923 922 +921 922 +922 923 +921 922 +920 922 +924 925 +925 924 +925 924 +925 924 +924 925 +925 924 +924 925 +925 924 +925 924 +925 924 +924 925 +925 924 +924 925 +926 927 +926 927 +926 927 +927 926 +927 926 +927 926 +926 927 +927 926 +926 927 +926 927 +927 926 +926 927 +927 926 +927 926 +927 926 +926 927 +927 926 +928 929 +929 928 +928 929 +928 929 +929 928 +929 928 +928 929 +929 928 +929 928 +929 928 +928 929 +929 928 +931 930 +931 930 +930 931 +930 931 +930 931 +930 931 +931 930 +930 931 +930 931 +930 931 +930 931 +930 931 +931 930 +932 933 +933 932 +932 933 +933 932 +933 932 +932 933 +932 933 +933 932 +933 932 +933 932 +932 933 +933 932 +937 934 +936 935 +935 937 +935 937 +935 937 +937 935 +935 936 +935 937 +936 937 +934 937 +937 935 +937 936 +937 934 +937 934 +937 935 +935 937 +935 936 +939 938 +938 939 +939 938 +938 939 +939 938 +939 938 +938 939 +939 938 +938 939 +938 939 +939 938 +939 938 +938 939 +939 938 +940 941 +942 940 +941 942 +940 941 +942 941 +943 941 +943 942 +940 941 +943 941 +942 943 +940 941 +944 945 +945 944 +944 945 +944 945 +944 945 +944 945 +945 944 +945 944 +945 944 +944 945 +945 944 +944 945 +947 946 +947 946 +946 947 +946 947 +947 946 +948 946 +947 948 +948 946 +946 948 +946 947 +947 946 +946 949 +946 948 +946 949 +947 946 +948 947 +948 949 +949 946 +946 947 +950 952 +953 952 +951 953 +952 953 +951 953 +954 951 +950 954 +951 953 +953 952 +950 953 +952 954 +950 953 +951 950 +952 950 +953 952 +954 952 +950 951 +951 953 +956 955 +956 955 +956 955 +956 955 +955 956 +955 956 +956 955 +956 955 +955 956 +955 956 +956 955 +958 957 +957 958 +958 957 +958 957 +957 958 +957 958 +957 958 +958 957 +958 957 +957 958 +958 957 +957 958 +958 957 +957 958 +960 959 +959 960 +959 960 +959 960 +959 960 +959 960 +960 959 +960 959 +959 960 +960 959 +960 959 +962 961 +961 962 +962 961 +962 961 +961 962 +962 961 +961 962 +962 961 +961 962 +962 961 +962 961 +961 962 +962 961 +961 962 +962 961 +962 961 +962 961 +962 961 +962 961 +965 966 +966 963 +963 966 +965 966 +965 966 +966 963 +965 964 +966 965 +965 966 +963 964 +966 963 +963 966 +966 964 +966 964 +963 964 +964 963 +965 966 +965 966 +963 966 +968 967 +967 968 +968 967 +968 967 +967 968 +967 968 +968 967 +967 968 +967 968 +968 967 +967 968 +967 968 +968 967 +968 967 +968 967 +967 968 +970 969 +970 969 +970 969 +970 969 +970 969 +969 970 +970 969 +970 969 +969 970 +969 970 +972 973 +972 973 +971 972 +973 972 +973 972 +973 972 +971 973 +971 973 +972 971 +973 972 +971 972 +973 971 +971 972 +974 975 +976 974 +974 976 +975 974 +974 976 +974 976 +975 976 +975 974 +976 974 +974 975 +975 974 +975 976 +975 974 +976 974 +976 975 +975 976 +974 975 +975 974 +977 978 +978 977 +977 978 +978 977 +978 977 +978 977 +978 977 +978 977 +977 978 +978 977 +977 978 +978 977 +978 977 +979 981 +981 980 +979 980 +980 979 +981 979 +979 981 +980 979 +979 980 +981 979 +981 980 +980 979 +981 980 +979 980 +979 980 +981 980 +979 980 +982 983 +984 982 +984 983 +984 982 +984 983 +982 983 +983 984 +983 982 +984 982 +984 983 +984 983 +982 983 +982 984 +984 983 +982 984 +982 983 +984 983 +986 985 +986 985 +986 985 +985 986 +986 985 +986 985 +986 985 +985 986 +985 986 +986 985 +985 986 +989 987 +989 987 +990 988 +990 989 +989 990 +990 989 +987 990 +989 988 +990 987 +987 989 +990 987 +992 991 +992 991 +991 992 +991 994 +992 993 +994 991 +994 992 +992 994 +991 992 +993 992 +993 991 +995 996 +996 997 +995 997 +997 995 +995 996 +997 995 +997 996 +997 996 +996 997 +995 996 +996 995 +995 996 +996 995 +996 995 +995 996 +996 995 +997 995 diff --git a/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/13.a b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/13.a new file mode 100644 index 0000000..30fd83d --- /dev/null +++ b/05-advanced_algorithms_and_complexity/04-np-completeness/04-reschedule_exams/tests/13.a @@ -0,0 +1 @@ +BRGRBGRBRRGBRBGRBRGBRBBRBRGGBBRRGBRGBRGGRBGRGGBGRBBGGBGGRRGBRRGBRGRBBGGBRGBGGBRGRBGGBRBRGBGRBGRGBBRBGRGBRRBGGBRBGGRGBRRBBGRGRBBGRRBBRGBGRRRBGBRGGGBGRRGBRRGRBGBGGRBGRRGBRBBGRGRBRGBRBBRGRRGGBRGRGBRRGRBBRGRBBRGRBGRRGBRBGRBRBGRRGBGRGBGBRBRGBBGRBRBRGGRRBGGBRBGGBRBGRGRBRGRGRBRBGBGGRBRGBGBGBRBRGGBRRGBRRGBRGRGBRRBGRGBRGGBRGBRRBGGBRBGBRRBGGGBRGGRRBGBRBGRBRBRGBBBRGRBGBRBGGBRBRGRBRGBGBRBGRBRBRBGBRGGBGRRGBRGBGRRBRRGBBRBGGBGBGBGRGBRBGGBRRBGBRGRBGGRBRRGRGBGGBRBRGBRBGBGBRGBRRGBRRBGRGRBGGBRBRGBGBBGRRRGBGBBRGRGRBBRBGBRBRGGGRBRRGBGGGRBRGBGGBRGBRGBRBRRGBRBGRGBBRRBRBRRBGGBBBRRGRGBRBGRGRRRBGRBRGGBRGBGRBGRRGBRRGBRRBGGBBGGBGBRBGBRGBRBRBGRBBGRGBRBBGRGRBRGBRBGGGRGBBGRBGRRGBGGRGRBRBGRBBGRGRBGRGRBBGGRBRBRGRBGRBRBBRGGBRBBGBGBGRRGBRBRGGRBRGBGGGRBGRGBRGRGBGRGBGRBRGBGBRGBGBRGGBRGRBGRRBGBBGRGBRBGRBRBGRBGGBRBBGRBRGBRBGRBRGGBRGBRBBGRGRGGBRGRGBRRGBRGBBRGBRBGBBRGGRRGBRBBGRGBRGRBRBBGRGBRRGGBGBRGBGGGRRBBGRGRBGGRBRBGRRBGRGGBGGBRRBRRGRBGGBRBRBRGGGRBGBRGGBRBGBBGBRGBGBRGRGBGRGRBBGGRBGBRBRGRBRGRGGBRBGRBGGBGRBGBRRBRRBGBGRRRGB |