void main(){
  import std.stdio, std.string, std.conv, std.algorithm;

  int n; rd(n);
  auto c=new long[](n-1), s=new long[](n-1), f=new long[](n-1);
  foreach(i; 0..(n-1)) rd(c[i], s[i], f[i]);

  auto best=new long[](n);
  long inf=1_000_000_000_000_000_000;
  fill(best, inf);
  auto tot=new long[](n);
  for(auto i=0, t=inf; i+1<n; t=best[i]+c[i], i++){
    best[i]=min(t, s[i]);
    auto cur=best[i];
    for(auto j=i; j+1<n; j++){
      auto k=((cur-s[j])+f[j]-1)/f[j];
      k=max(0, k);
      auto st=s[j]+k*f[j];
      cur=st+c[j];
    }
    tot[i]=cur;
  }
  writefln("%(%s\n%)", tot);
}

void rd(T...)(ref T x){
  import std.stdio, std.string, std.conv;
  auto l=readln.split;
  assert(l.length==x.length);
  foreach(i, ref e; x){
    e=l[i].to!(typeof(e));
  }
}
void wr(T...)(T x){
  import std.stdio;
  foreach(e; x) write(e, " ");
  writeln();
}