import java.util.*;
/**
* @version Ver 1.0
* @date 2025/6/19
* @description 取出最少的球
*/
public class TaskShortestBall {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arrs = Arrays.stream(sc.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
int sum = arrs[0];
int[] balls = Arrays.stream(sc.nextLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
solve(sum,balls);
}
private static void solve(int sum, int[] balls) {
List<Integer> results = new ArrayList<>(balls.length);
int allBallNum = Arrays.stream(balls).sum();
if(allBallNum < sum){
System.out.println(results);
return;
}
for (int i = 0; i < balls.length; i++) {
results.add(balls[i]);
}
// 小球总数超过SUM,下界是0,上届是每个桶内球的最大值,mid是每个桶的最大容量
int left = 0, right = Arrays.stream(balls).max().getAsInt();
while(left < right){
int mid = left + (right - left+1) / 2;//向上取整
if(canReach(balls,mid,sum)){
left = mid;
}else{
right = mid - 1;
}
}
//System.out.println(left);
for (int i = 0; i < balls.length; i++) {
Integer integer = results.get(i);
if(integer > left){
results.set(i,integer - left);
}else{
results.set(i,0);
}
}
System.out.println(results);
}
private static boolean canReach(int[] balls, int mid,int sum) {
for (int i = 0; i < balls.length; i++) {
if(balls[i] > mid){
balls[i]= mid;
}
}
if(Arrays.stream(balls).sum()<= sum){
return true;
}
return false;
}
}