#include <bits/stdc++.h>
template <class T>
inline T bigmod(T p, T e, T M) {
  long long int ret = 1;
  for (; e > 0; e >>= 1) {
    if (e & 1) ret = (ret * p) % M;
    p = (p * p) % M;
  }
  return (T)ret;
}
template <class T>
inline T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <class T>
inline T modinverse(T a, T M) {
  return bigmod(a, M - 2, M);
}
template <typename T>
T nCr(T n, T r) {
  if (r > n - r) r = n - r;
  int ans = 1, i;
  for (i = 1; i <= r; i++) {
    ans *= n - r + i;
    ans /= i;
  }
  return ans;
}
using namespace std;
int check(int a, int b) {
  cout << "? " << a << " " << b << endl;
  int n;
  cin >> n;
  return n;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ios::sync_with_stdio(0);
  cout.flush();
  int n;
  cin >> n;
  int arr[n + 1];
  int num12 = check(1, 2);
  int num13 = check(1, 3);
  int num23 = check(2, 3);
  int x = ((num12) > (num13) ? (num12) : (num13)) -
          ((num12) < (num13) ? (num12) : (num13));
  int y = num23;
  int a = (x + y) / 2;
  int b = y - a;
  if (((num12) > (num13) ? (num12) : (num13)) == num13) {
    arr[3] = a;
    arr[2] = b;
  } else {
    arr[3] = b;
    arr[2] = a;
  }
  arr[1] = num13 - arr[3];
  for (int i = 4; i <= n; i++) {
    arr[i] = check(1, i) - arr[1];
  }
  cout << "!";
  for (int i = 1; i <= n; i++) cout << " " << arr[i];
  cout << endl;
}
