#include using namespace std; using ll = long long; template using V = vector; template using VV = vector>; templatebool chmax(T& a, const T& b) { if (a < b) { a = b; return 1; } return 0; } templatebool chmin(T& a, const T& b) { if (b < a) { a = b; return 1; } return 0; } template void view(T e){std::cout << e << std::endl;} template void view(const std::vector& v){for(const auto& e : v){ std::cout << e << " ";} std::cout << std::endl;} template void view(const std::vector >& vv){ for(const auto& v : vv){ view(v); } } #define rep(i, n) for(int i = 0; i < (int) n; i++) int main() { int n; cin >> n; V<> ans(n); cout << "? " << 2 << " " << n << endl; int x; cin >> x; ans[0] = n * (n + 1) / 2 - x; for (int i = 0; i < n - 2; i++) { cout << "? " << i + 1 << " " << i + 2 << endl; int r; cin >> r; ans[i + 1] = r - ans[i]; } V used(n, false); for (int i = 0; i < n - 1; i++) { used[ans[i] - 1] = true; } for (int i = 0; i < n; i++) { if (!used[i]) ans[n - 1] = i + 1; } cout << "! "; for (int i = 0; i < n; i++) { cout << ans[i] << " "; } cout << endl; }