1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<bits/stdc++.h>
using namespace std;
#define rep(a, b) for(int a = 0; a < (b); ++a)
pair<long long, long long>T[31];
int odw[31], mp[40000000];
int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);
	int n, k=1, ans=0;
	cin >> n;
	rep(i, n) {
		cin >> T[i].first >> T[i].second; 
		k*=2; 
	}
	rep(i, k) {
		int p=i;
		queue<int>q;
		rep(j, n) {
			if(p%2==1) {
				odw[j]=1;
				q.push(j);
			} else odw[j]=0;
			p/=2;
		}
		while(!q.empty()) {
			int j=q.front(), l=j; q.pop();
			while(l>=0 && T[l].first>=T[j].first-T[j].second) {
				if(!odw[l]) {
					odw[l]=1;
					q.push(l);
				}
				--l;
			}
			l=j;
			while(l<n && T[l].first<=T[j].first+T[j].second) {
				if(!odw[l]) {
					odw[l]=1;
					q.push(l);
				}
				++l;
			}
		}
		int a=0, z=1;
		rep(i, n) {
			a+=z*odw[i];
			z*=2;
		}
		if(!mp[a]) ++ans;
		++mp[a];
	}
	cout << ans;
}