import
java.util.*;
public
class
Main {
static
class
Process {
private
int
at;
private
int
bt;
private
int
ct;
private
int
tat;
private
int
wt;
private
int
pid;
public
int
getVar(String var) {
if
(var.equals(
"at"
))
return
at;
if
(var.equals(
"bt"
))
return
bt;
if
(var.equals(
"ct"
))
return
ct;
if
(var.equals(
"tat"
))
return
tat;
if
(var.equals(
"wt"
))
return
wt;
return
pid;
}
public
void
setVar(String var,
int
value) {
if
(var.equals(
"at"
))
at = value;
else
if
(var.equals(
"bt"
))
bt = value;
else
if
(var.equals(
"ct"
))
ct = value;
else
if
(var.equals(
"tat"
))
tat = value;
else
if
(var.equals(
"wt"
))
wt = value;
else
pid = value;
}
public
void
updateAfterCt() {
tat = ct - at;
wt = tat - bt;
}
public
void
display() {
System.out.printf(
"%d\t%d\t%d\t%d\t%d\t%d\n"
, pid, at, bt, ct, tat, wt);
}
}
public
static
float
average(ArrayList<Process> P, String var) {
int
total =
0
;
for
(Process temp : P) {
total += temp.getVar(var);
}
return
(
float
) total / P.size();
}
public
static
void
main(String[] args) {
Scanner sc =
new
Scanner(System.in);
int
n = sc.nextInt();
int
counter =
0
;
ArrayList<Process> P =
new
ArrayList<Process>(n);
for
(
int
i =
0
; i < n; i++) {
Process temp =
new
Process();
temp.setVar(
"pid"
, counter++);
temp.setVar(
"at"
, sc.nextInt());
temp.setVar(
"bt"
, sc.nextInt());
P.add(temp);
}
Collections.sort(P,
new
Comparator<Process>() {
public
int
compare(Process first, Process second) {
return
first.getVar(
"at"
) - second.getVar(
"at"
);
}
});
System.out.println(
"pid\tat\tbt\tct\ttat\twt"
);
P.get(
0
).setVar(
"ct"
, P.get(
0
).getVar(
"at"
) + P.get(
0
).getVar(
"bt"
));
P.get(
0
).updateAfterCt();
P.get(
0
).display();
for
(
int
i =
1
; i < P.size(); i++) {
if
(P.get(i).getVar(
"at"
) < P.get(i -
1
).getVar(
"ct"
)) {
P.get(i).setVar(
"ct"
, P.get(i -
1
).getVar(
"ct"
) + P.get(i).getVar(
"bt"
));
}
else
{
System.out.printf(
"curr['at'] : %d, prev['ct'] : %d\n\n"
, P.get(i).getVar(
"at"
),
P.get(i -
1
).getVar(
"ct"
));
P.get(i).setVar(
"ct"
, P.get(i).getVar(
"at"
) + P.get(i).getVar(
"bt"
));
}
P.get(i).updateAfterCt();
P.get(i).display();
}
System.out.printf(
"Average waiting time : %f\n"
, average(P,
"wt"
));
sc.close();
}
}