#include <iostream>

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

//#define STR_LENGTH 32
#define STR_LENGTH 21

using namespace std;

int main(int argc, char ** argv)
{
    int rank, size;
    /* NONONONONO*/
//    char string[STR_LENGTH];
    
//    string[] = {'H','e','l','l','o',',',' ','I',' ','a','m',' ','p','r','o','c','e','s','s','o','r'};
    
//    for(int i = 0; i < STR_LENGTH; i++) string[i] = "Hello, I'm processor";
    
//    for(int i = 0; i < STR_LENGTH; i++) cout<<string[i]<<endl;;
    
//    char mystring[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
//    for(int i = 0; i < STR_LENGTH; i++)
    /* NONONONONO*/
 
    
    
    
    char mystring[] = {'H','e','l','l','o',',',' ','I',' ','a','m',' ','p','r','o','c','e','s','s','o','r','\0'};
    cout<<mystring<<endl;
    
    char string[STR_LENGTH];
    
//    for(int i = 0; i < STR_LENGTH; i++) string[i] = mystring[i];
//    
//    for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
//    for(int i = 0; i < STR_LENGTH; i++) cout<<mystring[i];
//    cout<<endl;
    

    
    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Comm_size(MPI_COMM_WORLD, &size);

//    if (rank == 0) {
//        for(int i = 0; i < STR_LENGTH; i++) string[i] = mystring[i];
//        for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
//        cout<<endl;
//    }
    
    if (rank == 0) {
        for(int i = 0; i < STR_LENGTH; i++) string[i] = mystring[i];
        for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
        cout<<endl;
    }
    
    MPI_Bcast(string, STR_LENGTH, MPI_CHAR, 0, MPI_COMM_WORLD);
    
//    if (rank == 0) {
//        for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
//        cout<<" "<<rank<<endl;
//    }
//    
//    cout<<endl;
//    
//    if (rank == 1) {
//        for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
//        cout<<" "<<rank<<endl;
//    }
//    
//    cout<<endl;
//    
//    if (rank == 2) {
//        for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
//        cout<<" "<<rank<<endl;
//    }
//    
//    cout<<endl;
//    
//    if (rank == 3) {
//        for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
//        cout<<" "<<rank<<endl;
//    }
//    
//    cout<<endl;
    
//    for(rank = 0; rank < size; rank++)
    for(int n = 0; n < size; n++)
    {
        for(int i = 0; i < STR_LENGTH; i++) cout<<string[i];
        cout<<" "<<rank<<endl;
    }

    MPI_Finalize();
    return 0;
}
