#include <stdio.h>
#include <mpi.h>

int main (int argc, char **argv) {
  int rank, size;
  int data;
  MPI_Status status;
  MPI_Init (&argc, &argv);
  MPI_Comm_rank (MPI_COMM_WORLD, &rank);
  MPI_Comm_size (MPI_COMM_WORLD, &size);
  
  if(rank == 0) {
    data = 1;
    MPI_Send(&data, 1, MPI_INT, 1%size, 0, MPI_COMM_WORLD);
    MPI_Recv(&data, 1, MPI_INT, size-1, 0, MPI_COMM_WORLD, &status);
    printf("Value received: %d\n", data);
  } else {
    MPI_Recv(&data, 1, MPI_INT, (rank+size-1)%size, 0, MPI_COMM_WORLD, &status);
    data = 2 * data;
    MPI_Send(&data, 1, MPI_INT, (rank+1)%size, 0, MPI_COMM_WORLD);
  }
  MPI_Finalize();
  return 0;
}
