/*
Md Emam Hossain
ID : 290
Section : 09
Intake : 52
*/
#include<bits/stdc++.h>
using namespace std;
class process{
public:
string name;
int bt;
int prio;
int arvt;
int wt=0;
process(){
cin>>name>>bt>>prio>>arvt;
}
void show(){
cout<<name<<" "<<bt<<" "<<prio<<" "<<arvt<<endl;
}
};
int main(){
int n;
cin>>n;
vector<process> a(n);
//Sorting by arrival time
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(a[j].arvt<a[i].arvt)swap(a[i],a[j]);
if(a[j].arvt==a[i].arvt){
if(a[j].prio<a[i].prio)
swap(a[i],a[j]);
}
}
}
vector<string> ans;
vector<process> dem;
//preemptive step
for(int i=0;i<n;i++){
dem.push_back(a[i]);
//sorting demo
int n2=dem.size();
//Sorting by priority
for(int i=0;i<n2-1;i++){
for(int j=i+1;j<n2;j++){
if(dem[j].prio<dem[i].prio)swap(dem[i],dem[j]);
}
}
ans.push_back(dem[0].name);
dem[0].bt--;
if(dem[0].bt==0)dem.erase(dem.begin()+0);
}
//non-preemptive step
while(!dem.empty()){
int n2=dem.size();
ans.push_back(dem[0].name);
dem[0].bt--;
if(dem[0].bt==0)dem.erase(dem.begin()+0);
}
//Gantt Chart
cout<<"Gantt Chart "<<endl;
for(int i=0;i<ans.size();i++){
cout<<ans[i]<<" ";
}
cout<<endl<<endl<<"Waiting Times : "<<endl;
//finding waiting times for each process
for(int i=0;i<n;i++){
int ct=0;
for(int j=0;j<ans.size();j++){
if(a[i].name==ans[j])ct=j+1;
}
a[i].wt=ct-(a[i].arvt+a[i].bt);
}
//Calculating Avg. Waiting Times
float wt=0;
for(int i=0;i<n;i++){
cout<<a[i].name<<" "<<a[i].wt<<endl;
wt+=1.0*a[i].wt;
}
cout<<endl;
cout<<"Avg. Waitimg Time = "<<wt/n<<endl;
return 0;
}
/*
Sample Test Case
6
p1 10 2 1
p2 1 4 0
p3 2 1 3
p4 1 3 2
p5 5 5 3
p6 4 6 5
*/
LyoKTWQgRW1hbSBIb3NzYWluCklEIDogMjkwClNlY3Rpb24gOiAwOQpJbnRha2UgOiA1MgoqLwoKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIHByb2Nlc3N7CiAgICBwdWJsaWM6CiAgICBzdHJpbmcgbmFtZTsKICAgIGludCBidDsKICAgIGludCBwcmlvOwogICAgaW50IGFydnQ7CiAgICBpbnQgd3Q9MDsKCiAgICBwcm9jZXNzKCl7CiAgICAgICAgY2luPj5uYW1lPj5idD4+cHJpbz4+YXJ2dDsKICAgIH0KCiAgICB2b2lkIHNob3coKXsKICAgICAgICBjb3V0PDxuYW1lPDwiICI8PGJ0PDwiICI8PHByaW88PCIgIjw8YXJ2dDw8ZW5kbDsKICAgIH0KfTsKCgppbnQgbWFpbigpewogICAgaW50IG47CiAgICBjaW4+Pm47CgogICAgdmVjdG9yPHByb2Nlc3M+IGEobik7CgogICAgLy9Tb3J0aW5nIGJ5IGFycml2YWwgdGltZQogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgZm9yKGludCBqPWkrMTtqPG47aisrKXsKICAgICAgICAgICAgaWYoYVtqXS5hcnZ0PGFbaV0uYXJ2dClzd2FwKGFbaV0sYVtqXSk7CiAgICAgICAgICAgIGlmKGFbal0uYXJ2dD09YVtpXS5hcnZ0KXsKICAgICAgICAgICAgICAgaWYoYVtqXS5wcmlvPGFbaV0ucHJpbykKICAgICAgICAgICAgICAgc3dhcChhW2ldLGFbal0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxzdHJpbmc+IGFuczsKICAgIHZlY3Rvcjxwcm9jZXNzPiBkZW07CgogICAgIC8vcHJlZW1wdGl2ZSBzdGVwCiAgICBmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgICAgICBkZW0ucHVzaF9iYWNrKGFbaV0pOwoKICAgICAgICAvL3NvcnRpbmcgZGVtbwogICAgICAgIGludCBuMj1kZW0uc2l6ZSgpOwoKICAgICAgICAvL1NvcnRpbmcgYnkgcHJpb3JpdHkKICAgICAgICBmb3IoaW50IGk9MDtpPG4yLTE7aSsrKXsKICAgICAgICBmb3IoaW50IGo9aSsxO2o8bjI7aisrKXsKICAgICAgICAgICAgaWYoZGVtW2pdLnByaW88ZGVtW2ldLnByaW8pc3dhcChkZW1baV0sZGVtW2pdKTsKICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBhbnMucHVzaF9iYWNrKGRlbVswXS5uYW1lKTsKCiAgICAgICAgZGVtWzBdLmJ0LS07CiAgICAgICAgaWYoZGVtWzBdLmJ0PT0wKWRlbS5lcmFzZShkZW0uYmVnaW4oKSswKTsKCiAgICB9CgogICAgLy9ub24tcHJlZW1wdGl2ZSBzdGVwCiAgICB3aGlsZSghZGVtLmVtcHR5KCkpewogICAgICAgIGludCBuMj1kZW0uc2l6ZSgpOwoKICAgICAgICBhbnMucHVzaF9iYWNrKGRlbVswXS5uYW1lKTsKCiAgICAgICAgZGVtWzBdLmJ0LS07CiAgICAgICAgaWYoZGVtWzBdLmJ0PT0wKWRlbS5lcmFzZShkZW0uYmVnaW4oKSswKTsKICAgIH0KCiAgICAvL0dhbnR0IENoYXJ0CiAgICBjb3V0PDwiR2FudHQgQ2hhcnQgIjw8ZW5kbDsKICAgIGZvcihpbnQgaT0wO2k8YW5zLnNpemUoKTtpKyspewoKICAgICAgICBjb3V0PDxhbnNbaV08PCIgIjsKICAgIH0KCiAgICBjb3V0PDxlbmRsPDxlbmRsPDwiV2FpdGluZyBUaW1lcyA6ICI8PGVuZGw7CgogICAgLy9maW5kaW5nIHdhaXRpbmcgdGltZXMgZm9yIGVhY2ggcHJvY2VzcwogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgaW50IGN0PTA7CiAgICAgICAgZm9yKGludCBqPTA7ajxhbnMuc2l6ZSgpO2orKyl7CiAgICAgICAgICAgIGlmKGFbaV0ubmFtZT09YW5zW2pdKWN0PWorMTsKICAgICAgICB9CgogICAgICAgIGFbaV0ud3Q9Y3QtKGFbaV0uYXJ2dCthW2ldLmJ0KTsKICAgIH0KICAgIAogICAgLy9DYWxjdWxhdGluZyBBdmcuIFdhaXRpbmcgVGltZXMKICAgIGZsb2F0IHd0PTA7CgogICAgZm9yKGludCBpPTA7aTxuO2krKyl7CiAgICAgICAgY291dDw8YVtpXS5uYW1lPDwiICI8PGFbaV0ud3Q8PGVuZGw7CiAgICAgICAgd3QrPTEuMCphW2ldLnd0OwogICAgfQoKICAgIGNvdXQ8PGVuZGw7CgogICAgY291dDw8IkF2Zy4gV2FpdGltZyBUaW1lID0gIjw8d3Qvbjw8ZW5kbDsKCnJldHVybiAwOwp9CgovKgpTYW1wbGUgVGVzdCBDYXNlCjYKcDEgMTAgMiAxCnAyIDEgNCAwCnAzIDIgMSAzCnA0IDEgMyAyCnA1IDUgNSAzCnA2IDQgNiA1CgoqLwo=