#include <bits/stdc++.h>
using namespace std;
template <typename AA>
inline void CMax(AA &u, AA v) {
  if (v > u) u = v;
}
template <typename AA>
inline void CMin(AA &u, AA v) {
  if (v < u) u = v;
}
const double eps = 1E-8;
const int Inf = 0x3f3f3f3f, oo = 0x7fffffff, Mod = 998244353;
const long long Lnf = 0x3f3f3f3f3f3f3f3f;
template <typename AA>
inline void read(AA &x) {
  int s = 0;
  char c;
  while (c = getchar(), (c < '0' || c > '9') && c != '-')
    ;
  c == '-' ? (s = 1, x = 0) : (x = c - '0');
  while (c = getchar(), c >= '0' && c <= '9') x = x * 10 + c - '0';
  if (s) x = -x;
}
template <typename AA>
void print(AA k) {
  int num = 0;
  static char stk[23];
  if (k < 0) {
    putchar('-');
    k = -k;
  }
  while (k > 0) stk[++num] = k % 10 + 48, k /= 10;
  if (!num)
    putchar('0');
  else
    while (num) putchar(stk[num--]);
  putchar('\n');
}
inline int Log2(int x) { return 31 - __builtin_clz(x); }
char getc() {
  char ch;
  do {
    ch = getchar();
  } while (ch == ' ' || ch == '\n');
  return ch;
}
long long Pow(long long d, long long m) {
  long long f = 1;
  while (m) {
    if (m & 1) f = f * d % Mod;
    d = d * d % Mod;
    m >>= 1;
  }
  return f;
}
int N, M, S, T, Q, K;
int ans[1010];
signed main() {
  scanf("%d", &N);
  printf("? 1 2\n");
  fflush(stdout);
  int la, ye;
  scanf("%d", &la);
  ye = la;
  for (int a = (3); a <= (N); ++a) {
    printf("? 1 %d\n", a);
    fflush(stdout);
    int t;
    scanf("%d", &t);
    ans[a] = t - la;
    la = t;
  }
  printf("? 2 3\n");
  fflush(stdout);
  int t;
  scanf("%d", &t);
  ans[2] = t - ans[3];
  ans[1] = ye - ans[2];
  printf("!");
  for (int a = (1); a <= (N); ++a) printf(" %d", ans[a]);
  return 0;
}
