diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/.newGA.pro.cc.kate-swp b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/.newGA.pro.cc.kate-swp new file mode 100644 index 0000000000000000000000000000000000000000..a79487af1cf3e2951e64826de0274515ec5f0a6c Binary files /dev/null and b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/.newGA.pro.cc.kate-swp differ diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainLan b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainLan index e6233d70d469f98c18976790cae89ce875ce732f..a57ca169b7bb2979e2a5fbd6de4a126d9f53781f 100755 Binary files a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainLan and b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainLan differ diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq index 822448462fc573f575635ad95fd8827b8612fed2..e5c09103ecd9b46e7a1ad56da5468b7a77b5bfa0 100755 Binary files a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq and b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq differ diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.cc b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.cc index d4a7c14ce97eeaa129e3f34238fa18ec8972cede..c624d0c6f436b65ce9bd7fd3ff8f6bb1d1bd9f21 100644 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.cc +++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.cc @@ -31,6 +31,9 @@ int main (int argc, char** argv) cout << "Solution: " << solver.global_best_solution() << " Fitness: " << solver.global_best_solution().fitness() << endl; cout << "\n\n :( ---------------------- THE END --------------- :) "; + + if (remove("tempsolution") !=0) + cout<<"Remove operation failed"<<endl; ofstream fexit(argv[3]); if(!fexit) show_message(13); diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.o b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.o index 47c81ccbc27ab19ef7a51062a29f40010e6cd822..b88a15cbcdaa2a219869805c07c79a8b4197ba76 100644 Binary files a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.o and b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/MainSeq.o differ diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_columnas b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_columnas index a668ca5d9ff9298d6abf93b2a1392cd0e40078b6..04b2d3ee5680eebe9be71d35d48c935f1c5e7ffe 100644 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_columnas +++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_columnas @@ -1,51 +1,10 @@ -50 -1 1 1 1 1 1 5 4 1 1 2 1 1 1 1 2 -1 3 3 3 2 1 1 1 3 2 1 2 1 2 1 -2 1 1 5 3 1 2 3 1 1 -4 1 1 2 7 5 1 1 1 1 2 1 2 -1 2 4 2 3 1 2 2 6 1 1 2 1 -2 2 2 2 3 1 1 2 4 1 1 2 1 3 -2 1 4 1 2 1 1 1 2 3 11 -2 3 1 1 4 4 1 1 6 1 1 1 -1 1 7 1 2 1 5 1 1 1 4 2 1 1 -2 1 1 1 1 3 1 1 2 1 2 5 2 -9 2 2 1 1 2 3 1 1 1 1 -2 4 2 1 3 7 5 2 1 1 1 3 -3 1 1 1 1 1 3 1 2 2 4 1 2 2 -6 1 1 2 2 1 3 3 2 3 1 2 1 -1 2 1 1 2 1 2 1 2 6 1 2 3 -3 2 1 2 2 3 2 1 1 3 -2 2 1 1 5 2 1 1 2 7 3 2 -2 2 3 1 1 2 1 2 1 3 2 2 -3 1 1 1 3 2 2 4 1 2 2 1 1 1 1 -2 1 1 1 2 8 1 1 1 1 1 2 -1 1 2 3 5 1 2 1 1 2 1 1 -3 1 1 2 5 1 2 1 1 4 3 1 -1 1 1 3 2 1 1 1 1 4 1 2 1 -2 1 1 1 1 7 1 2 1 2 3 -3 6 1 1 3 4 2 1 1 1 2 2 -2 1 3 1 3 1 2 1 3 1 2 1 -3 1 3 3 1 3 4 1 1 -2 1 2 4 3 1 1 1 1 1 1 1 1 1 -4 1 5 1 1 2 3 2 1 2 6 4 -1 1 5 1 1 2 3 2 5 2 -1 9 1 9 3 4 1 4 -1 1 1 1 1 1 2 1 1 2 2 2 1 2 2 3 -2 3 1 7 1 1 1 5 1 4 1 -1 2 3 1 2 1 1 2 1 2 1 3 1 -1 1 1 1 1 3 1 6 1 2 1 1 2 1 1 1 1 -2 1 1 1 4 1 1 5 1 2 1 1 4 -1 1 4 1 1 1 1 3 1 2 1 -2 3 1 4 1 2 1 5 3 2 1 2 1 -1 1 1 4 1 1 2 1 1 1 2 1 5 4 -1 1 2 1 2 2 1 3 2 2 1 1 4 1 4 3 -2 1 1 1 2 2 2 4 2 1 3 1 1 -1 1 1 1 4 5 1 1 1 1 3 2 2 -1 1 2 2 2 1 3 2 1 2 1 2 1 2 -1 4 2 3 1 3 2 1 2 3 2 1 1 -2 1 2 7 1 1 1 1 3 1 1 5 3 -2 2 3 1 2 1 2 1 2 2 1 1 1 1 -2 2 1 1 1 2 1 1 1 1 2 1 1 2 -1 2 3 2 3 1 2 1 7 2 2 -1 1 1 1 3 1 4 1 1 1 1 1 1 1 2 2 -1 1 2 1 1 1 1 3 1 2 2 2 2 2 1 +9 +1 2 2 +2 1 2 +5 1 +1 1 3 +1 1 1 2 +3 1 1 +2 2 1 +2 1 1 +5 1 diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_filas b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_filas index 865f8c631f7bf2b0f7c1c4c9016ddab5e9591601..d2f863e3edfb163dafedd4025e67be5f492ad4f5 100644 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_filas +++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/datos_filas @@ -1,51 +1,10 @@ -50 -2 2 2 6 2 7 3 2 4 1 1 -1 1 1 1 3 5 1 6 1 1 1 1 3 2 -6 2 1 2 2 1 1 2 2 2 1 3 -5 1 1 1 2 2 1 1 1 1 1 1 1 -1 1 4 2 5 2 1 3 1 1 1 -3 3 1 1 3 2 1 5 4 2 1 2 -1 2 2 3 1 1 3 2 1 2 2 1 -3 1 1 1 1 1 2 9 2 1 1 1 -1 1 1 3 1 1 1 8 2 1 1 6 1 -2 6 2 1 1 1 1 1 2 3 3 1 6 -2 3 4 2 1 2 3 3 4 1 2 -1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 7 -4 5 1 1 2 2 1 2 3 -2 2 1 1 1 1 3 2 2 1 1 -3 3 2 1 1 1 1 1 1 1 3 3 1 2 2 -1 1 2 3 3 1 1 4 1 2 3 -2 6 1 4 1 2 1 1 3 2 1 2 2 3 -2 5 3 1 1 2 2 2 1 1 1 1 1 2 2 -1 3 1 2 1 1 1 2 2 3 4 2 1 1 2 2 -1 1 1 3 1 1 1 1 1 1 1 1 2 5 1 -1 3 1 1 2 1 1 3 1 2 1 5 3 -2 1 1 1 2 3 1 2 2 1 1 1 1 2 1 1 1 -3 2 2 1 3 2 1 5 1 1 4 1 -1 2 3 5 1 2 1 2 1 1 2 3 2 1 -2 1 2 2 3 1 1 1 1 1 4 1 1 4 -1 3 2 1 2 2 2 3 2 2 1 4 1 1 -2 2 1 1 1 3 2 1 1 4 1 2 1 2 1 -1 1 1 1 1 1 2 1 3 1 1 3 1 1 1 -4 1 1 2 1 1 1 3 1 1 1 1 1 1 -6 1 4 4 3 1 1 1 1 1 2 -3 4 3 3 1 1 1 1 1 1 2 2 1 1 -1 2 1 3 2 1 1 1 1 1 1 2 1 1 1 -2 3 1 1 2 2 8 1 1 2 4 2 2 -2 1 1 5 2 3 1 7 2 3 1 -1 2 1 3 1 1 2 5 4 2 1 -2 3 1 3 1 1 1 2 1 4 2 2 1 -1 2 1 1 1 1 1 2 2 1 4 2 -4 6 3 3 2 1 1 1 1 2 1 3 1 -3 3 2 2 3 1 2 1 1 1 1 1 1 1 -1 1 1 2 3 2 1 6 2 1 2 2 -1 1 1 4 1 1 2 2 1 2 2 1 2 1 -1 3 1 2 1 2 3 1 1 5 2 1 -3 3 4 1 2 1 1 5 1 2 4 1 1 2 -3 4 1 1 3 1 7 3 1 -2 1 2 1 2 1 1 3 5 1 1 1 1 2 4 -2 1 4 3 1 1 3 2 3 1 1 3 -1 1 1 1 4 2 1 1 2 1 2 1 3 -1 4 5 1 1 1 2 1 2 4 3 2 -2 2 1 4 2 2 2 1 2 2 1 4 -1 1 1 3 1 3 1 2 1 3 3 1 2 +9 +1 1 2 2 +3 1 2 +3 3 1 +1 2 1 1 +1 1 1 +1 1 2 +1 5 +2 2 1 +1 3 diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.hh b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.hh index 3837580e57b039cd7eda3dd72862096cc35edb11..87b549b1e8ecab7c445a54e72f26d38f5a5b6aca 100644 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.hh +++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.hh @@ -11,6 +11,7 @@ #define INC_newGA #include "newGAstructures.hh" #include <vector> +#include <stdio.h> skeleton newGA diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc index 3ce1a40dd7181ba3efc84141176904075fea31e7..801a2ed6456e66b15704b0bc4b7fefe206a9d771 100644 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc +++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.cc @@ -476,7 +476,7 @@ skeleton newGA double Solution::fitness () { - //cout << "ESTOY ENTRANDO A FITNESS" << endl; + //cout << "ESTOY ENTRANDO A FITNESS" << endl; double fitness = 0.0; std::vector<std::vector<int>> datosDeFilas = _pbm.datosFilas(); std::vector<int> cantGruposDeFila = _pbm.cantGruposFila(); @@ -661,21 +661,122 @@ skeleton newGA //FILE--------------------------------------------------------------------------------------------------- - ofstream outfile("tempsolution"); - - stringstream ss; + //COPIA DE FITNESS----------------------------------------------------------------------------------------------------------------------------------------------- + double fitness = 0.0; + std::vector<std::vector<int>> datosDeFilas = _pbm.datosFilas(); + std::vector<int> cantGruposDeFila = _pbm.cantGruposFila(); + for (int i=0;i<_pbm.cantFilas();i++) + { + int cantSeguidos=0; + int columna=0; + int cantGrupos= cantGruposDeFila[i]; + int iteradorGrupos=0; + int resultado=0; //Resultado de la diferencia entre el bloque que tiene que haber y el bloque en el juego + int cantUnos=0; + bool terminoBloque = true; + while (columna < _pbm.cantColumnas()) + { + if (_var[columna][i] == 1) + { + cantSeguidos++; + terminoBloque=false; + cantUnos++; + } + else + { + if (cantSeguidos > 0) + { + if (iteradorGrupos < cantGruposDeFila[i]) + { + resultado= abs(datosDeFilas[i][iteradorGrupos] - cantSeguidos); //valor absoluto de la resta + } + else + { + resultado = cantSeguidos; + } + fitness= fitness + 1000 * resultado; + terminoBloque=true; + iteradorGrupos++; + resultado=0; + } + cantSeguidos=0; + } + columna++; + //Si se termino la columna y faltan bloques + + } + if (cantSeguidos > 0) + { + if (iteradorGrupos < cantGruposDeFila[i]) + { + resultado= abs(datosDeFilas[i][iteradorGrupos] - cantSeguidos); //valor absoluto de la resta + } + else + { + resultado = cantSeguidos; + } + fitness= fitness + 1000 * resultado; + terminoBloque=true; + iteradorGrupos++; + resultado=0; + } + if(iteradorGrupos != cantGrupos) + { + int restar= abs(cantGrupos - iteradorGrupos); + fitness= fitness + 1100*restar; + } + int totalUnos = 0; + for(int j = 0; j< cantGrupos; j++) + { + totalUnos += datosDeFilas[i][j]; + } + if(cantUnos != totalUnos) + { + int restar= abs(totalUnos - cantUnos); + fitness= fitness + 300*restar; + } + } + //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + + int fit = (int) fitness; + + bool overwrite = false; + string line2; + ifstream inFile2; + inFile2.open("tempsolution"); + + if (!inFile2) + { + overwrite = true; + } + else + { + getline(inFile2, line2); + int oldFit = stoi(line2); + overwrite = fit < oldFit; + } - for(int col = 0; col < _pbm.cantColumnas(); col++) + if (overwrite) { - for (int fil = 0; fil < _pbm.cantFilas(); fil++) + ofstream outfile("tempsolution"); + + stringstream ss; + + ss << fit << endl; + + for(int col = 0; col < _pbm.cantColumnas(); col++) { - ss << _var[col][fil] << " "; + for (int fil = 0; fil < _pbm.cantFilas(); fil++) + { + ss << _var[col][fil] << " "; + } + ss << endl; } - ss << endl; - } - outfile << ss.str(); - outfile.close(); + outfile << ss.str(); + outfile.close(); + } + //FILE--------------------------------------------------------------------------------------------------- @@ -722,6 +823,7 @@ skeleton newGA exit(1); // call system to stop } + getline(inFile2, line2); for(int c = 0; c < _pbm.cantColumnas(); c++) { getline(inFile2, line2); @@ -759,6 +861,15 @@ skeleton newGA } } + +// cout << "fitness debug: " << fitness() << endl; +// +// if (currentBestFitness == 0) +// { +// cout << "wtf" << endl; +// exit(EXIT_FAILURE); +// } + exit; inFile2.close(); diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.o b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.o index 4e8a4d3a5b78307b5a0a05bea9b2048fbeb36de6..b6e5e032ec92af81a46771085ffd5685ea3fcb67 100644 Binary files a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.o and b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/newGA.req.o differ diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/res/sol.txt b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/res/sol.txt index c0d68c66f4564291b0ce6b8cadce303381292d41..444b99fa11cb64231b7a44a19dfc810fcc6d7837 100644 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/res/sol.txt +++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/res/sol.txt @@ -3,14 +3,14 @@ STATISTICS OF TRIALS ------------------------------------------------------------------ -1 125800 304400 83500 834 6.11349e+06 7.2359e+06 -2 124200 297700 53900 538 3.83605e+06 6.86023e+06 -3 115200 300200 78900 788 5.53009e+06 6.95522e+06 -4 231600 292900 100 0 0 0 -5 222400 301800 100 0 0 0 -6 216500 295000 100 0 0 0 -7 229400 296000 100 0 0 0 -8 231400 295600 100 0 0 0 -9 224000 299500 100 0 0 0 -10 236300 307100 100 0 0 0 +1 16400 47500 15800 157 129087 530866 +2 2600 48100 34200 341 253560 586832 +3 16900 47300 5700 56 31397 484556 +4 10900 48600 2600 25 14304 505776 +5 18200 48200 1200 11 6566 488600 +6 0 56100 5700 56 29292 29292 +7 25500 48600 100 0 0 0 +8 27000 50100 100 0 0 0 +9 20100 48700 100 0 0 0 +10 23900 47200 100 0 0 0 ------------------------------------------------------------------ diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/solution b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/solution index 2e813ffa86b9616dd145a2cdbe3b996d04abd70b..957a918e475fc69576810e2dfcb7513f91877225 100644 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/solution +++ b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/solution @@ -1,25 +1,9 @@ -1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 -1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 1 0 -0 1 0 0 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 0 -1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 -1 1 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 0 1 1 1 0 1 0 0 -1 0 0 0 1 0 0 0 1 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 1 -1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 1 0 1 0 0 -1 1 0 0 1 1 0 0 1 0 1 0 1 0 0 0 1 0 1 1 1 1 1 1 0 -0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 1 0 0 1 1 1 0 1 1 1 -0 1 1 0 1 0 1 0 1 1 1 1 0 0 0 0 0 0 0 1 1 0 0 1 0 -0 0 1 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 0 1 0 -0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 -0 1 1 1 1 1 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 -1 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 -0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 0 1 1 -0 0 1 0 1 1 1 1 0 1 0 0 1 0 0 1 1 0 1 0 0 1 1 1 0 -0 1 1 1 1 0 0 0 1 0 1 0 0 0 1 1 1 1 0 1 1 0 0 1 1 -0 1 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 1 1 1 0 1 1 1 0 -0 0 0 1 1 1 1 0 1 0 1 0 0 1 1 1 1 1 0 1 1 1 0 0 1 -0 1 1 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 1 1 1 -0 1 1 1 1 1 1 0 1 1 0 1 0 0 1 0 1 1 1 0 1 1 0 0 0 -1 1 0 0 1 1 0 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 1 1 1 -0 1 1 1 0 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 1 0 -0 1 0 1 1 0 0 1 1 1 1 0 1 1 1 0 1 0 1 0 0 1 1 0 1 -1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 +1 0 1 0 1 1 0 1 1 +0 1 1 1 0 1 0 1 1 +1 1 1 0 1 1 1 0 1 +1 0 1 1 0 0 1 0 1 +0 0 1 0 1 0 0 0 1 +0 1 0 1 0 0 1 1 0 +1 0 1 1 1 1 1 0 0 +1 1 0 1 1 0 0 0 1 +0 1 0 0 0 1 1 1 0 diff --git a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/tempsolution b/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/tempsolution deleted file mode 100644 index 02909c7c9542995e58bd06156a6a20f073c8f506..0000000000000000000000000000000000000000 --- a/ProyectoFinal/AlgoritmoGenetico/malva/rep/GA/tempsolution +++ /dev/null @@ -1,50 +0,0 @@ -0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1 1 -0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 1 1 1 0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 -0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1 1 1 0 1 0 1 -0 0 0 1 1 1 1 0 0 0 0 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 1 -1 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 0 1 1 0 1 -0 0 1 1 0 0 1 1 0 0 1 1 0 0 0 1 1 0 0 0 1 1 1 0 0 1 0 0 1 0 1 1 0 1 1 1 1 0 1 0 1 0 1 1 0 1 0 1 1 1 -0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 -0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 -1 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 0 1 1 0 1 0 1 -0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 0 1 1 -0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 1 0 0 1 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 -0 0 0 1 1 0 0 0 0 1 1 1 1 0 1 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 1 1 1 -0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 1 -0 0 0 0 0 0 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 1 1 0 1 1 1 0 1 1 0 1 1 1 0 1 0 1 1 0 1 -0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 1 1 -0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 1 -0 1 1 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 0 1 1 0 1 0 0 1 0 1 0 1 0 1 -0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 -0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 0 1 0 1 -0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 0 1 1 1 0 1 -0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 1 1 0 1 0 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 0 -0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 1 0 1 1 1 -0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 0 1 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 0 1 0 1 0 1 1 0 1 1 -0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 0 1 0 1 1 0 1 -0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 1 0 0 1 1 1 0 1 1 1 1 0 1 0 1 0 -0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 0 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 -0 0 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 0 1 0 1 0 1 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 -0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 1 1 0 1 1 -0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 0 0 1 1 1 1 0 0 1 0 1 1 1 1 -0 1 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0 1 0 1 1 0 1 0 1 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 1 1 1 -0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 1 1 0 0 0 1 0 1 0 0 1 0 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 0 1 -0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1 0 1 0 1 0 1 -0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 -0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 1 0 1 1 0 1 0 -0 0 0 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 -0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 1 0 1 0 1 1 1 1 1 0 1 1 1 1 -0 0 0 1 0 0 1 0 1 1 0 1 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1 1 1 -0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 0 1 1 1 0 1 0 1 -0 1 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 0 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1 1 0 1 1 -0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 1 1 0 1 1 0 1 0 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 0 1 1 -0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 0 0 0 1 1 0 1 1 1 0 1 1 0 1 0 1 -0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 1 1 -0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 1 1 0 0 1 0 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1 0 0 1 0 1 0 1 0 1 -0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 0 1 1 -0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 0 1 1 0 1 1 -0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 1 0 1 1 -0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 0 0 1 1 0 1 1 0 1 1 0 1 0 1 1 0 1