#include <bits/stdc++.h>
const int MOD = 1e9 + 7;
using namespace std;
template <typename T>
void priArr(T a[], int i, int j, string name = "", bool nl = false) {
  if (name != "" && nl) cout << name << "\n";
  if (name != "" && !nl) cout << name << " ";
  for (int b = (i); b <= int(j); b++) {
    if (nl)
      cout << b << ":" << a[b] << "\n";
    else
      cout << b << ":" << a[b] << " ";
  }
  if (!nl) cout << endl;
}
template <typename T>
void priArr(T a[], int i, string name = "", bool nl = false) {
  if (name != "" && nl) cout << name << "\n";
  if (name != "" && !nl) cout << name << " ";
  for (int b = 0; b < i; b++) {
    if (nl)
      cout << b << ":" << a[b] << "\n";
    else
      cout << b << ":" << a[b] << " ";
  }
  if (!nl) cout << endl;
}
template <typename T>
void priVec(T a, int i, int j, string name = "", bool nl = false) {
  if (name != "" && nl) cout << name << "\n";
  if (name != "" && !nl) cout << name << " ";
  for (int b = (i); b <= int(j); b++) {
    if (nl)
      cout << b << ":" << a[b] << "\n";
    else
      cout << b << ":" << a[b] << " ";
  }
  if (!nl) cout << endl;
}
template <typename T>
void priVec(T a, int i, string name = "", bool nl = false) {
  if (name != "" && nl) cout << name << "\n";
  if (name != "" && !nl) cout << name << " ";
  int p = 0;
  for (int b = 0; b < i; b++) {
    if (nl)
      cout << b << ":" << a[b] << "\n";
    else
      cout << b << ":" << a[b] << " ";
    p++;
  }
  if (!nl) cout << endl;
}
template <typename T>
T max1(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
T min1(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
T max1(T a, T b, T c) {
  return max1(a, max1(b, c));
}
template <typename T>
T min1(T a, T b, T c) {
  return min1(a, min1(b, c));
}
template <typename T>
T abs1(T a, T b) {
  return a > b ? a - b : b - a;
}
template <typename T>
void swap1(T a, T b) {
  T temp = b;
  b = a;
  a = temp;
}
template <typename T>
void swap1(T a[], int i, int j) {
  T temp = a[i];
  a[i] = a[j];
  a[j] = temp;
}
template <typename T, typename P>
void reset(T array[], int size, P value) {
  for (int i = 0; i < size; i++) array[i] = value;
}
const int MAXN = 100000 + 10;
const int MAXM = 100000 + 10;
bool hack = false;
int t, n;
int arr[MAXN];
int cnt = 0;
int main(int argc, char const *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (int i = 0; i < n + 1; i++) {
    cin >> arr[i];
    if (i > 0 && arr[i] > 1 && arr[i - 1] > 1) cnt++;
  }
  if (cnt == 0) {
    cout << "perfect" << endl;
  } else {
    cout << "ambiguous" << endl;
    int node = 1;
    cout << "0 ";
    for (int i = (1); i <= int(n); i++) {
      for (int j = 0; j < arr[i]; j++) cout << node << " ";
      node = node + arr[i - 1];
    }
    cout << endl;
    cout << "0 ";
    int p1, p2;
    p1 = p2 = 1;
    for (int i = (1); i <= int(n); i++) {
      for (int j = 0; j < arr[i]; j++) {
        if (j < arr[i] / 2)
          cout << p1 << " ";
        else
          cout << p2 << " ";
      }
      if (arr[i] > 1) {
        p1 = p1 + arr[i - 1];
        p2 = p1 + 1;
      } else {
        p1 = p2 = p1 + arr[i - 1];
      }
    }
    cout << endl;
  }
  return 0;
}
