#include <bits/stdc++.h>
using namespace std;
const int V = 3e5;
const int N = V * 2 + 5;
long long ans, a[N], b[N];
int q, fa[N], sz[N];
int find(int x) {return fa[x] == x ? x : find(fa[x]);}
vector <pair <int, int>> buc[N << 2];
map <pair <int, int>, int> mp;
void modify(int l, int r, int ql, int qr, int x, auto v) {
if(ql <= l && r <= qr) return buc[x].push_back(v), void();
int m = l + r >> 1;
if(ql <= m) modify(l, m, ql, qr, x << 1, v);
if(m < qr) modify(m + 1, r, ql, qr, x << 1 | 1, v);
}
void query(int l, int r, int x) {
long long origin = ans;
vector <int> op;
for(auto it : buc[x]) {
int u = find(it.first), v = find(it.second);
if(u == v) continue;
if(sz[u] < sz[v]) swap(u, v);
ans -= a[u] * b[u] + a[v] * b[v];
fa[v] = u, sz[u] += sz[v], a[u] += a[v], b[u] += b[v];
ans += a[u] * b[u], op.push_back(v);
}
if(l == r) cout << ans << " ";
else {
int m = l + r >> 1;
query(l, m, x << 1), query(m + 1, r, x << 1 | 1);
}
reverse(op.begin(), op.end());
for(int v : op) sz[fa[v]] -= sz[v], a[fa[v]] -= a[v], b[fa[v]] -= b[v], fa[v] = v;
ans = origin;
}
int main() {
cin >> q;
for(int i = 1; i <= V; i++) fa[i] = i, sz[i] = a[i] = 1;
for(int i = V + 1; i <= V << 1; i++) fa[i] = i, sz[i] = b[i] = 1;
for(int i = 1; i <= q; i++) {
int x, y;
scanf("%d%d", &x, &y), y += V;
pair <int, int> p = make_pair(x, y);
if(mp.find(p) != mp.end()) modify(1, q, mp[p], i - 1, 1, p), mp.erase(p);
else mp[p] = i;
}
for(auto it : mp) modify(1, q, it.second, q, 1, it.first);
query(1, q, 1);
return 0;
}