import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext()){
solution(in);
}
}
/**
* 模拟法
*
* distribute -> room_i
* 不论room_i的位置在哪里,其房间内再分配后的人数总是最少的.
* 如果出现多个房间内人数都与最少人数相同的情况,那么从room_x向前推,第一个人数最少的房间即为room_i.
*
* @param in
*/
private static void solution(Scanner in){
// 房间数量
int total = in.nextInt();
// 最后一个人被分配的房间号
int lastIn = in.nextInt();
// 每个房间人数, 从1开始
long[] rooms = new long[total+1];
// 房间的最少人数
long pMin = Integer.MAX_VALUE;
for(int i=1; i<=total; i++){
rooms[i] = in.nextLong();
pMin = Math.min(pMin, rooms[i]);
}
// 已重新分配的房间号,即: 房间号lastIn(包含lastIn)前面人数最少的房间号
int distribute = lastIn;
while(rooms[distribute] != pMin){
// distribute = (distribute>1) ? distribute-1 : total;
distribute = (distribute-2+total)%total+1;
}
if(distribute < lastIn){
for(int i=1; i<=total; i++){
if(i < distribute){
rooms[i] -= pMin;
}else if(i == distribute){
rooms[i] = pMin*total+(lastIn-distribute);
}else if(distribute<i && i<=lastIn){
rooms[i] -= (pMin+1);
}else{
rooms[i] -= pMin;
}
}
}
if(distribute == lastIn){
for(int i=1; i<=total; i++){
if(i != distribute){
rooms[i] -= pMin;
}else{
rooms[i] = pMin*total;
}
}
}
if(distribute > lastIn){
for(int i=1; i<=total; i++){
if(i <= lastIn){
rooms[i] -= (pMin+1);
}else if(lastIn<i && i<distribute){
rooms[i] -= pMin;
}else if(i == distribute){
rooms[i] = pMin*total+(lastIn)+(total-distribute);
}else{
rooms[i] -= (pMin+1);
}
}
}
for(int i=1; i<=total; i++){
System.out.print(rooms[i]+" ");
}
}
}