#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int f = 1, res = 0, ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') res = res * 10 + ch - 48, ch = getchar();
  return f * res;
}
int _sta[1 << 8];
inline void write(int val) {
  if (!val) {
    putchar('0');
    return;
  }
  if (val < 0) putchar('-'), val = -val;
  *_sta = 0;
  while (val > 0) _sta[++*_sta] = val % 10, val /= 10;
  for (int i = *_sta, _Lim = 1; i >= _Lim; i--) putchar(_sta[i] + 48);
}
const int N = 5005;
int n, A[N];
int main() {
  scanf("%d", &n);
  for (int i = 1, _Lim = n / 3; i <= _Lim; i++) {
    int L = (i - 1) * 3 + 1;
    int R = L + 2;
    printf("? %d %d\n", L, L + 1);
    fflush(stdout);
    int a = read();
    printf("? %d %d\n", R, R - 1);
    fflush(stdout);
    int b = read();
    printf("? %d %d\n", L, R);
    fflush(stdout);
    int c = read();
    A[L + 1] = (a + b - c) / 2;
    A[L] = a - A[L + 1];
    A[R] = b - A[R - 1];
  }
  for (int i = n / 3 * 3 + 1, _Lim = n; i <= _Lim; i++) {
    printf("? %d %d\n", i, 1);
    fflush(stdout);
    int a = read();
    A[i] = a - A[1];
  }
  printf("! ");
  for (int i = 1, _Lim = n; i <= _Lim; i++)
    write(A[i]), putchar(i < n ? ' ' : '\n');
}
