#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100009;
int n;
struct tree {
  struct asdf {
    int v, beg, end;
  };
  vector<asdf> t;
  int M;
  void init(int x) {
    int s = 1;
    while (s <= x) s *= 2;
    s *= 2;
    t.resize(2 * s);
    for (int i = s; i <= (2 * s - 1); ++i) {
      t[i].v = 0;
      t[i].beg = t[i].end = i - s;
    }
    M = s;
    s /= 2;
    while (s > 0) {
      for (int i = s; i <= (2 * s - 1); ++i) {
        t[i].beg = t[2 * i].beg;
        t[i].end = t[2 * i + 1].end;
      }
      s /= 2;
    }
  }
  void add(int a, int b, int c, int k = 1) {
    if (a > b) return;
    if (a <= t[k].beg && t[k].end <= b) {
      t[k].v += c;
      return;
    }
    if (a <= (t[k].beg + t[k].end) / 2) add(a, b, c, 2 * k);
    if (b > (t[k].beg + t[k].end) / 2) add(a, b, c, 2 * k + 1);
  }
  int query(int a) {
    int w = 0;
    a = M + a;
    while (a > 0) {
      w += t[a].v;
      a /= 2;
    }
    return w;
  }
};
int main() {
  scanf("%d", &n);
  int cnt = 1;
  long long sum = 0;
  tree T;
  T.init(n);
  for (int i = 0; i < n; i++) {
    int t;
    scanf("%d", &t);
    if (t == 1) {
      int a, x;
      scanf("%d %d", &a, &x);
      sum += a * x;
      T.add(0, a - 1, x);
    }
    if (t == 2) {
      int k;
      scanf("%d", &k);
      T.add(cnt, cnt, k);
      sum += k;
      cnt++;
    }
    if (t == 3) {
      cnt--;
      int z = T.query(cnt);
      T.add(cnt, cnt, -z);
      sum -= z;
    }
    printf("%lf\n", (double)sum / cnt);
  }
  return 0;
}
