#include<iostream>
#include<unistd.h>
using namespace std:
#define N 5
#define thinking 0
#define hungry 1
#define eating 2
int state[N];

void test(int i){
    if(state[i]==hungry&& state[i+4]!=eating && state[1]!=eating){
        state[i]=eating;
        cout<<"Philosopher"<<i<<"takes forks"<<i+4<<"and"<<i<<"and starts eating."<<endl;
    }
}
void take_fork(int i){
    if(state[i]==thinking && state[i+4]!=eating && state[1]!=eating){
        state[i]==hungry;
        cout<<"Philosopher "<<i<<"is hungry"<<endl;
    }
    test(i);
}
void put_fork(int i){
    if(state[i]==eating && state[i+4]!=eating && state[1]!=eating){
        state[i]==thinking;
        cout<<"Philosopher"<<i<<"puts down forks and starts thinking"<<endl;
    }
    test(i+4);
    test(1);
}
int main(){
    for(int i=0;i<N;i++){
        state[i]=thinking;
    }
    for(int i=0;i<N;i++){
        take_fork(i);
        sleep(1);
        put_fork(i);
        cout<<endl;
    }
}