实质是一个背包 对于一个数 我们只需要知道能否表示它 即0和1的状态 所以用bitset来优化
当前状态由上一个状态转移过来

#include <bits/stdc++.h>

using namespace std;

#define LL long long
#define ULL unsigned long long
#define mes(x,a) memset(x,a,sizeof(x));
#define sca(a) scanf("%d",&a)
#define lowbit(x)  x & (-x)
#define mk make_pair
#define pb(x) push_back(x)
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define lson v << 1
#define rson v << 1 | 1
#define pii pair<int, int>

const int N = 1e9;
const int M = 1e7+5;
const int INF = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const double E = 2.7182818284590452353;


bitset <1000005> dp[105];
int n,l,r;

int main()
{
    cin >> n ;

    dp[0][0] = 1;

    for(int i = 1;i <= n;i ++){
        cin >> l >> r;

        for(int j = l;j <= r;j ++){
            dp[i] |= (dp[i - 1] << (j * j));
        }
    }

    cout << dp[n].count() << '\n';

    return 0;
}