#include <bits/stdc++.h>
using namespace std;
long long mod(long long a, long long b) {
  if (a % b < 0) {
    return a % b + b;
  }
  return a % b;
}
long long mod_exp(long long a, long long b, long long c) {
  long long res = 1;
  a = a % c;
  while (b > 0) {
    if (b % 2 == 1) {
      res = (res * a) % c;
    }
    b /= 2;
    a = (a * a) % c;
  }
  return res;
}
long long gcd(long long a, long long b) {
  if (b == 0) {
    return a;
  }
  return gcd(b, a % b);
}
bool prime[3001];
void SieveOfEratosthenes() {
  memset(prime, true, sizeof(prime));
  prime[1] = false;
  for (int p = 2; p * p <= 3000; p++) {
    if (prime[p] == true) {
      for (int i = p * p; i <= 3000; i += p) prime[i] = false;
    }
  }
}
long long powe[20];
void power() {
  powe[0] = 1;
  for (long long i = 1; i < 20; i++) {
    powe[i] = (powe[i - 1] * 10) % 1000000007;
    if (powe[i] < 0) powe[i] += 1000000007;
  }
}
long long func(long long A[], long long n) {
  long long lis[n];
  lis[0] = 1;
  for (long long i = 0; i < n; i++) {
    lis[i] = 1;
  }
  return lis[0];
}
void solve() {
  long long a, b, c;
  cin >> a >> b >> c;
  if ((c >= b && b >= a) || (a >= b && b >= c)) {
    if (a >= b && b >= c) {
      swap(a, c);
    }
    while (b > (a + c) / 2) {
      b--;
      a++;
    }
    while (b < (a + c) / 2) {
      b++;
      c--;
    }
    cout << ((((a > b) ? a : b) > c) ? ((a > b) ? a : b) : c) << "\n";
    return;
  }
}
int main() {
  long long n, a, b, c;
  cin >> n;
  cout << "\n? 1 2\n";
  fflush(stdout);
  cin >> a;
  cout << "? 2 3\n";
  fflush(stdout);
  cin >> b;
  cout << "? 1 3\n";
  fflush(stdout);
  cin >> c;
  long long A[n];
  A[0] = (a + c - b) / 2;
  A[1] = a - A[0];
  A[2] = c - A[0];
  for (long long i = 3; i < n; i++) {
    cout << "? 1 " << i + 1 << "\n";
    fflush(stdout);
    cin >> a;
    A[i] = a - A[0];
  }
  cout << "! ";
  for (long long i = 0; i < n; i++) {
    cout << A[i] << " ";
  }
  return 0;
}
