//First Come First Serve - CPU Scheduling Algorithm
#include<iostream>
#include<vector>
using namespace std;

struct Process {
    int process_number;
    int arrival_time;
    int burst_time;
    int completion_time;
    int waiting_time;
    int turn_around_time;

    Process(int _process_number, int _arrival_time, int _burst_time) {
        process_number = _process_number;
        arrival_time = _arrival_time;
        burst_time = _burst_time;
    }
};

int main() {
    cout << "Enter the number of processes: ";
    int total_processes;
    cin >> total_processes;
    
    vector<Process> processes;
    for(int i = 1;i <= total_processes;i++) {
        int arrival_time, burst_time;
        cin >> arrival_time >> burst_time;
        Process process(i, arrival_time, burst_time);
        processes.push_back(process);
    }

    int current_time = 0;
    for(auto &process : processes) {
        process.completion_time = current_time + process.burst_time;
        process.turn_around_time = process.completion_time - process.arrival_time;
        process.waiting_time = process.turn_around_time - process.burst_time;
        current_time = process.completion_time;
    }

    for(auto process : processes) {
        cout << "Process Number  : " << process.process_number << endl;
        cout << "Arrival Time    : " << process.arrival_time << endl;
        cout << "Burst Time      : " << process.burst_time<< endl;
        cout << "Completion Time : " << process.completion_time << endl;
        cout << "Waiting Time    : " << process.waiting_time << endl;
        cout << "Turn around TIme: " << process.turn_around_time << endl;
        cout << endl;
    }

    return 0;
}