Problem:
Score : 1400 points

Problem Statement

Snuke got an integer sequence from his mother, as a birthday present. The sequence has N elements, and the i-th of them is i.
Snuke performs the following Q operations on this sequence. The i-th operation, described by a parameter q_i, is as follows:

Take the first q_i elements from the sequence obtained by concatenating infinitely many copy of the current sequence, then replace the current sequence with those q_i elements.

After these Q operations, find how many times each of the integers 1 through N appears in the final sequence.

Constraints

1 ≦ N ≦ 10^5

0 ≦ Q ≦ 10^5

1 ≦ q_i ≦ 10^{18}

All input values are integers.

Input

The input is given from Standard Input in the following format:

N Q
q_1
:
q_Q

Output

Print N lines. The i-th line (1 ≦ i ≦ N) should contain the number of times integer i appears in the final sequence after the Q operations.

Sample Input 1

5 3
6
4
11

Sample Output 1

3
3
3
2
0

After the first operation, the sequence becomes: 1,2,3,4,5,1.

After the second operation, the sequence becomes: 1,2,3,4.

After the third operation, the sequence becomes: 1,2,3,4,1,2,3,4,1,2,3.

In this sequence, integers 1,2,3,4,5 appear 3,3,3,2,0 times, respectively.

Sample Input 2

10 10
9
13
18
8
10
10
9
19
22
27

Sample Output 2

7
4
4
3
3
2
2
2
0
0

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<cmath>
#define rep(i,j,k) for(register int i = j; i <= k; i++)
#define dow(i,j,k) for(register int i = j; i >= k; i--)
#define ll long long
using namespace std;

inline ll read() { 
	ll s = 0, t = 1; char c = getchar();
	while( !isdigit(c) ) { if( c == '-' ) t = -1; c = getchar(); }
	while( isdigit(c) ) s = s * 10 + c - 48, c = getchar();
	return s * t;
}

const int N = 1e5+5; 
int n, m, r = 0; ll ans[N], t[N], q[N];
inline int find(ll x) { 
	int L = 1, R = r, mid;
	while( L < R ) { 
		mid = (L + R + 1) >> 1;
		if( q[mid] < x ) L = mid;
		else R = mid - 1;
	} return L;
}

int main() { 
//	freopen("in.txt","r",stdin);
	m = q[++r] = read(), n = read();
	rep(i,1,n) { 
		ll x = read();
		while( r && x <= q[r] ) r--;
		q[++r] = x;
	}
	t[r] = 1;
	dow(i,r,1) { 
		ll x = q[i];
		while( x > q[1] ) { 
			int y = find(x);
			t[y] += t[i] * x / q[y];
			x %= q[y]; 
		} ans[x] += t[i];
	}
	dow(i,q[1]-1,1) ans[i] += ans[i+1];
	rep(i,1,m) printf("%lld\n", ans[i]);
	return 0;
}