protected static int[] processTaskScheduling(List<DiMi> lst) {
    int t = lst.size();
    int arr[] = new int[t];
    Collections.sort(lst);
    int currMaxIndex = getMinMaxDI(lst);
    int currMax = lst.get(currMaxIndex).delay;
    arr[t - 1] = currMax;

    int posarr[] = new int[t];
    for (int i = 0; i < t; i++) {
      DiMi diMi = lst.get(i);
      posarr[diMi.index] = i;
    }

    for (int i = t - 1; i > 0; i--) {
      int indexInSortedArray = posarr[i];
      DiMi diMi = lst.get(indexInSortedArray);
      int mi = diMi.mi;
      diMi.delay = 0;
      diMi.mi = 0;
      if (currMaxIndex > indexInSortedArray) {
        currMax -= mi;
        for (int j = 0; j < indexInSortedArray; j++) {
          if (lst.get(j).delay > currMax) {
            currMax = lst.get(j).delay;
            currMaxIndex = j;
          }
        }
        if (indexInSortedArray < t - 1) {
          for (int j = indexInSortedArray + 1; j <= currMaxIndex; j++) {
            lst.get(j).delay -= mi;
          }
        }
      } else if (currMaxIndex == indexInSortedArray) {
        int localCurrMax = currMax - mi;
        for (int j = 0; j < indexInSortedArray; j++) {
          if (lst.get(j).delay > localCurrMax) {
            localCurrMax = lst.get(j).delay;
            currMaxIndex = j;
          }
        }

        if (localCurrMax > (currMax - mi)) {
          currMax = localCurrMax;
        } else {
          currMaxIndex = getMinMaxDI(lst);
          currMax = lst.get(currMaxIndex).delay;
        }
      }
      arr[i - 1] = currMax;
    }

    return arr;
  }
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);

    int n = in.nextInt();
    List<DiMi> lst = new ArrayList<DiMi>();
    for (int i = 0; i < n; i++) {
      DiMi e = new DiMi();
      e.di = in.nextInt();
      e.mi = in.nextInt();
      e.index = i;
      lst.add(e);
    }

    int arr[] = processTaskScheduling(lst);

    for (int i = 0; i < n; i++) {
      System.out.println(arr[i]);
    }
  }
  private static int getMinMaxDI(List<DiMi> ts) {
    int maxDelay = 0;
    int maxDelayIndex = 0;
    int stepNum = 0;
    for (int i = 0; i < ts.size(); i++) {
      DiMi next = ts.get(i);
      stepNum += next.mi;
      int delayLocal = stepNum - next.di;
      if (delayLocal < 0) {
        delayLocal = 0;
      }
      next.delay = delayLocal;

      if (delayLocal > maxDelay) {
        maxDelay = delayLocal;
        maxDelayIndex = i;
      }
    }
    return maxDelayIndex;
  }