#include <bits/stdc++.h>
using namespace std;
int linearSearch(vector<int> data, int a) {
  int i = 0;
  while (i < (int)data.size()) {
    if (data[i] == a) {
      return i;
    }
    i++;
  }
}
int main() {
  int n;
  cin >> n;
  if (n == 1) {
    int tmp;
    cin >> tmp;
    cout << "Exemplary pages.";
  } else if (n == 2) {
    int a, b;
    cin >> a >> b;
    int a1, a2;
    if (a == b) {
      cout << "Exemplary pages.";
      return 0;
    } else if (a > b) {
      a1 = 2;
      a2 = 1;
    } else {
      a1 = 1;
      a2 = 2;
    }
    if ((max(b, a) - min(b, a)) % 2 != 0) {
      cout << "Unrecoverable configuration.";
    } else {
      cout << (max(b, a) - min(b, a)) / 2 << " ml. from cup #" << a1
           << " to cup #" << a2 << ".";
    }
  } else {
    set<int> nums;
    map<int, int> cnt;
    vector<int> data;
    data.push_back(-1);
    int i = 0;
    while (i < n) {
      int tmp;
      cin >> tmp;
      nums.insert(tmp);
      cnt[tmp]++;
      data.push_back(tmp);
      i++;
    }
    if ((int)nums.size() == 1) {
      cout << "Exemplary pages.";
    } else if ((int)nums.size() == 3) {
      set<int>::iterator values = nums.begin();
      int a, b, c;
      a = *values;
      values++;
      b = *values;
      values++;
      c = *values;
      int gmin, gmax, gmid;
      gmin = min(a, min(b, c));
      gmax = max(a, max(b, c));
      gmid = a + b + c - gmin - gmax;
      if (cnt[gmin] == 1 && cnt[gmax] == 1) {
        if ((gmax + gmin) % 2 == 0 && (gmax + gmin) / 2 == gmid) {
          cout << (gmax - gmin) / 2 << " ml. from cup #"
               << linearSearch(data, gmin) << " to cup #"
               << linearSearch(data, gmax) << ".";
        } else {
          cout << "Unrecoverable configuration.";
        }
      } else {
        cout << "Unrecoverable configuration.";
      }
    } else {
      cout << "Unrecoverable configuration.";
    }
  }
  return 0;
}
