Detailed requirements: Implement first the serial version as a reference for both the runtime (to measure speedup) and the produced solution (to compare that the final configuration is the same in both versions). Paralellize the problem using data decomposition, both 1D and 2D. Run experiments varying the size of the problem (number of generations, size of matrix) and the number of processes. Measure the runtimes and compute speedup.