#include <bits/stdc++.h>
using namespace std;
long long powermodm(long long x, long long n, long long M) {
  long long result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % M;
    x = (x * x) % M;
    n = n / 2;
  }
  return result;
}
bool contains(long long *arr, long long x, long long n) {
  for (long long i = 0; i < n; i++) {
    if (arr[i] == x) {
      return true;
    }
  }
  return false;
}
int gcd(int a, int b) {
  if (b == 0) return a;
  a %= b;
  return gcd(b, a);
}
long long power1(long long x, long long n) {
  long long res = 1;
  while (n > 0) {
    if (n % 2) {
      res = res * x;
    }
    x = x * x;
    n /= 2;
  }
  return res;
}
class SegmentTree {
  long long *tree;

 public:
  SegmentTree(long long *A, long long n) { build(0, 0, n - 1, A); }
  void build(long long node, long long start, long long end, long long *A) {
    if (start == end) {
      tree[node] = A[start];
    } else {
      long long mid = (start + end) / 2;
      build(2 * node + 1, start, mid, A);
      build(2 * node + 2, mid + 1, end, A);
      tree[node] = tree[2 * node + 1] + tree[2 * node + 2];
    }
  }
  void update(long long node, long long start, long long end, long long idx,
              long long val, long long *A) {
    if (start == end) {
      A[idx] = val;
      tree[node] = val;
    } else {
      long long mid = (start + end) / 2;
      if (start <= idx and idx <= mid) {
        update(2 * node + 1, start, mid, idx, val, A);
      } else {
        update(2 * node + 2, mid + 1, end, idx, val, A);
      }
      tree[node] = tree[2 * node + 1] + tree[2 * node + 2];
    }
  }
  long long query(long long node, long long start, long long end, long long l,
                  long long r) {
    if (r < start or end < l) {
      return 0;
    }
    if (l <= start and end <= r) {
      return tree[node];
    }
    long long mid = (start + end) / 2;
    long long p1 = query(2 * node + 1, start, mid, l, r);
    long long p2 = query(2 * node + 2, mid + 1, end, l, r);
    return p1 + p2;
  }
};
class TrieNode {
 public:
  TrieNode *adj[2];
  long long height;
  TrieNode() {
    for (long long i = 0; i < 2; i++) {
      adj[i] = NULL;
    }
    height = 0;
  }
};
void insert(TrieNode *root, long long n) {
  TrieNode *tmp = root;
  for (long long i = 29; i >= 0; i--) {
    long long pos = ((n & (1LL << i)) != 0 ? 1 : 0);
    if (tmp->adj[pos] == NULL) {
      tmp->adj[pos] = new TrieNode();
    }
    tmp = tmp->adj[pos];
  }
}
long long findShort(long long *pre, long long i, long long n, long long x) {
  long long low = 1, high = i, mid;
  long long ans = high;
  while (low <= high) {
    mid = (low + high) / 2;
    if (pre[i] - pre[mid - 1] <= x) {
      ans = min(ans, mid);
      high = mid - 1;
    } else {
      low = mid + 1;
    }
  }
  return ans;
}
bool sorted(vector<long long> arr) {
  if (arr.size() == 1) {
    return true;
  }
  for (long long i = 1; i < arr.size(); i++) {
    if (arr[i] < arr[i - 1]) {
      return false;
    }
  }
  return true;
}
bool custSort(pair<long long, long long> a, pair<long long, long long> b) {
  return (a.first > b.first || (a.first == b.first && a.second > b.second));
}
long long getAns(long long *arr, long long n, long long c) {
  long long ans = 0;
  for (long long i = 0; i < n; i++) {
    ans += abs(arr[i] - power1(c, i));
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  long long a[n];
  for (long long i = 0; i < n; i++) {
    cin >> a[i];
  }
  if (n == 1) {
    cout << 1 << " " << 1 << '\n';
    cout << 0 << '\n';
    cout << 1 << " " << 1 << '\n';
    cout << 0 << '\n';
    cout << 1 << " " << 1 << '\n';
    cout << -a[0] << '\n';
  } else {
    cout << 1 << " " << 1 << '\n';
    cout << -a[0] << '\n';
    cout << 1 << " " << n << '\n';
    for (long long i = 0; i < n; i++) {
      if (i == 0) {
        cout << 0 << ' ';
      } else {
        cout << -n * a[i] << ' ';
      }
    }
    cout << '\n';
    cout << 2 << " " << n << '\n';
    for (long long i = 1; i < n; i++) {
      cout << (n - 1) * a[i] << " ";
    }
    cout << '\n';
  }
  return 0;
}
