// #pragma GCC target("avx") // #pragma GCC optimize("O3") // #pragma GCC optimize("unroll-loops") #include using namespace std; #define rep(i,n) for(int i = 0; i < (int)n; i++) #define FOR(n) for(int i = 0; i < (int)n; i++) #define repi(i,a,b) for(int i = (int)a; i < (int)b; i++) #define all(x) x.begin(),x.end() //#define mp make_pair #define vi vector #define vvi vector #define vvvi vector #define vvvvi vector #define pii pair #define vpii vector> template bool chmax(T &a, const T b) {if(a bool chmin(T &a, const T b) {if(a>b) {a=b; return true;} else {return false;}} using ll = long long; using ld = long double; using ull = unsigned long long; const ll INF = numeric_limits::max() / 2; const ld pi = 3.1415926535897932384626433832795028; const ll mod = 998244353; int dx[] = {1, 0, -1, 0, -1, -1, 1, 1}; int dy[] = {0, 1, 0, -1, -1, 1, -1, 1}; #define int long long vector bfs01(vector>> g, int s) { deque que; vector dist(g.size(), -1); dist[s] = 0; que.push_back(s); while(!que.empty()) { int v = que.front(); que.pop_front(); for(auto e : g[v]) if(dist[e.first] == -1) { dist[e.first] = dist[v] + e.second; if(e.second == 0) que.push_front(e.first); else que.push_back(e.first); } } return dist; } void solve() { int n, m; cin >> n >> m; vi a(m); FOR(m) { cin >> a[i]; --a[i]; } vector g(n*(m+1)); FOR(m) { rep(j, n-1) { g[j+i*n].emplace_back(j+1+i*n, 1); g[j+1+i*n].emplace_back(j+i*n, 1); } rep(j, n) if(a[i] != j && a[i]+1 != j) { g[j+(i+1)*n].emplace_back(j+i*n, 0); g[j+i*n].emplace_back(j+(i+1)*n, 0); } g[a[i]+1+(i+1)*n].emplace_back(a[i]+i*n, 0); g[a[i]+(i+1)*n].emplace_back(a[i]+1+i*n, 0); g[a[i]+1+i*n].emplace_back(a[i]+(i+1)*n, 0); g[a[i]+i*n].emplace_back(a[i]+1+(i+1)*n, 0); } rep(j, n-1) { g[j+m*n].emplace_back(j+1+m*n, 1); g[j+1+m*n].emplace_back(j+m*n, 1); } vi dist = bfs01(g, m*n); repi(i, 1, n) cout << dist[i] << " \n"[i == n-1]; } signed main() { cin.tie(nullptr); ios::sync_with_stdio(false); solve(); return 0; }