#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
typedef pair<int,int> pii;
const int MAXN = 3e4;
bitset <30000> bs[MAXN];
int main(){
    ll n, m; cin >> n >> m;
    vector<ll> b(m + 5), p(m + 5);
    for(int i = 1; i <= m; i++) cin >> b[i] >> p[i];
    vector<ll> adj[n + 5];
    for(int i = 1; i <= m; i++){
        adj[b[i]].push_back(p[i]);
    }
    vector<ll> pq[2];
    pq[0].push_back(b[1]);
    for(int dist=0;!pq[dist&1].empty();dist++){
        for (auto idx : pq[dist&1]) {
            if (idx == b[2]) {
                cout << dist << "\n";
                return 0;
            }
            for(auto i : adj[idx]){
                // cout << idx << " " << i << "\n";
                bs[idx][i] = 1;
                if(idx+i < n && !bs[idx+i][i]){
                    bs[idx+i][i] = 1;
                    pq[dist&1^1].push_back(idx+i);
                    adj[idx+i].push_back(i);
                }
                if(idx-i >= 0 && !bs[idx-i][i]){
                    bs[idx-i][i] = 1;
                    pq[dist&1^1].push_back(idx-i);
                    adj[idx-i].push_back(i);
                }
            }
            adj[idx].clear();
        }
        pq[dist&1].clear();
    }
    cout << "-1\n";
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |