#include <iostream>
#include <mpi.h>
using namespace std;
int main(int argc, char* argv[])
{
int my_rank;
int N, S;
int tag=99;
MPI_Status status;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
    if (my_rank==0) {
	N=100;
	MPI_Bcast(&N,1,MPI_INT,0,MPI_COMM_WORLD);
	MPI_Recv(&N,1,MPI_INT,MPI_ANY_SOURCE,tag,MPI_COMM_WORLD,&status);
	MPI_Recv(&N,1,MPI_INT,MPI_ANY_SOURCE,tag,MPI_COMM_WORLD,&status);
    }
    else {
	MPI_Recv(&N,1,MPI_INT,MPI_ANY_SOURCE,tag,MPI_COMM_WORLD,&status);
	cout << "received " << N << "from " << status.MPI_SOURCE <<endl;
	MPI_Send(&N,1,MPI_INT,status.MPI_SOURCE,status.MPI_TAG,MPI_COMM_WORLD);
    }

    MPI_Finalize();
    return EXIT_SUCCESS;
}
