#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1000000007;
long long int power(long long int a, long long int b, long long int m) {
  long long int r = 1;
  while (b) {
    if (b & 1) r = r * a % m;
    a = (a * a) % m;
    b >>= 1;
  }
  return r;
}
long long int power(long long int a, long long int b) {
  long long int r = 1;
  while (b) {
    if (b & 1) r = r * a;
    a = a * a;
    b >>= 1;
  }
  return r;
}
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return (a / gcd(a, b)) * b;
}
long long int modularInverse(long long int a, long long int m) {
  return power(a, m - 2, m);
}
int ceill(int a, int b) { return ((a + b - 1) / b); }
int mini(int a, int b) { return a < b ? a : b; }
int maxi(int a, int b) { return a > b ? a : b; }
int f[100005], b[100005];
int ans[100005];
vector<int> mark[100005];
int main() {
  int i, j, k, t, n, te, m;
  t = 1;
  while (t--) {
    scanf("%d", &n);
    scanf("%d", &m);
    for (i = (0); i < (n); i++) {
      scanf("%d", &f[i]);
      mark[f[i]].push_back(i + 1);
    }
    for (i = (0); i < (m); i++) {
      scanf("%d", &b[i]);
    }
    int f = 3;
    for (i = (0); i < (m); i++) {
      if (mark[b[i]].size() == 0) {
        f = min(f, 1);
      } else if (mark[b[i]].size() > 1) {
        f = min(f, 2);
      } else {
        ans[i] = mark[b[i]][0];
      }
    }
    if (f == 1) {
      puts("Impossible");
    } else if (f == 2) {
      puts("Ambiguity");
    } else {
      puts("Possible");
      for (i = (0); i < (m); i++) {
        printf("%d ", ans[i]);
      }
    }
  }
  return 0;
}
