B. Spongebob and Joke
 
 

While Patrick was gone shopping, Spongebob decided to play a little trick on his friend. The naughty Sponge browsed through Patrick's personal stuff and found a sequence a1, a2, ..., am of length m, consisting of integers from 1 to n, not necessarily distinct. Then he picked some sequence f1, f2, ..., fn of length n and for each number ai got number bi = fai. To finish the prank he erased the initial sequence ai.

It's hard to express how sad Patrick was when he returned home from shopping! We will just say that Spongebob immediately got really sorry about what he has done and he is now trying to restore the original sequence. Help him do this or determine that this is impossible.

Input

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 100 000) — the lengths of sequences fi and bi respectively.

The second line contains n integers, determining sequence f1, f2, ..., fn (1 ≤ fi ≤ n).

The last line contains m integers, determining sequence b1, b2, ..., bm (1 ≤ bi ≤ n).

Output

Print "Possible" if there is exactly one sequence ai, such that bi = fai for all i from 1 to m. Then print m integers a1, a2, ..., am.

If there are multiple suitable sequences ai, print "Ambiguity".

If Spongebob has made a mistake in his calculations and no suitable sequence ai exists, print "Impossible".

Sample test(s)
input
3 3
3 2 1
1 2 3
output
Possible
3 2 1
input
3 3
1 1 1
1 1 1
output
Ambiguity
input
3 3
1 2 1
3 3 3
output
Impossible
Note

In the first sample 3 is replaced by 1 and vice versa, while 2 never changes. The answer exists and is unique.

In the second sample all numbers are replaced by 1, so it is impossible to unambiguously restore the original sequence.

In the third sample fi ≠ 3 for all i, so no sequence ai transforms into such bi and we can say for sure that Spongebob has made a mistake.

 题意:

给你b数组,f数组  ,构造出a数组满足:   bi = fai.  有多组情况输出Ambiguity,一组情况输出它,没有输出impossblie

题解:

我们标记f数组,计数找唯一就是了

//
#include<bits/stdc++.h>
using namespace std; typedef long long ll;
#define mem(a) memset(a,0,sizeof(a))
#define pb push_back inline ll read()
{
ll x=,f=;char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;ch=getchar();
}
while(ch>=''&&ch<=''){
x=x*+ch-'';ch=getchar();
}return x*f;
}
//****************************************
const int N=+;
#define maxn 100000+5 int H[N],ans[N],c[N],b[N],f[N];
int main() { int n=read(),m=read();
for(int i=;i<=n;i++) {
scanf("%d",&f[i]);
H[f[i]]++;
c[f[i]]=i;
}
for(int i=;i<=m;i++) {
scanf("%d",&b[i]);
}int f=,siz=,cool=;
for(int i=;i<=m;i++) {
if(H[b[i]]>) f=;
if(H[b[i]]==&&!f) {ans[++siz]=c[b[i]];}
if(H[b[i]]==) cool=;
}
if(cool) {
cout<<"Impossible"<<endl;
}
else if(f) {
cout<<"Ambiguity"<<endl;
}
else {
cout<<"Possible"<<endl;
for(int i=;i<=siz;i+=) {
cout<<ans[i]<<" ";
}
}
return ;
}

代码

最新文章

  1. Linux学习心得之 Linux下ant安装与使用
  2. AFNetworking 3.0 版本使用
  3. Javascript模块化编程(三):require.js的用法【转】
  4. ubuntu 命令学习大全
  5. iOS开发app上架流程之证书的制作
  6. 让shell 变得容易理解
  7. Datatable插件的简单的使用方式 和 学习方式
  8. Android service 服务的应用之电话监听器以及短信监听器
  9. AngularJS概念概述和第一个使用例子
  10. linux安装VLAN,系统怎么划分VLAN打标签上交换机
  11. 20175324 2018-2019-2 《Java程序设计》第8周学习总结
  12. 花10分钟搞懂开源框架吧 - 【NancyFx.Net】
  13. Nagios 使用 NSClient++ 监控Windows Server
  14. Sql Server数据库之四个增删改查
  15. JVM思考-init和clinit区别
  16. 2018-2019-2 20165302 《网络对抗技术》Exp3 免杀原理与实践
  17. sql server dba常用概念、操作分析char,varchar,nvarchar,varchar(max)
  18. java Web 工程servlet中@WebServlet(&quot;/HelloServlet&quot;) 是怎么工作的
  19. JpaRepository 查询规范
  20. js获取鼠标坐标位置兼容多个浏览器

热门文章

  1. Android文件操作报open failed: EBUSY (Device or resource busy)
  2. tomcat报错org.springframework.web.context.ContextLoaderListener找不到
  3. JS——AJAX
  4. MYSQL数据库迁移到ORACLE数据库
  5. cad二次开发中各种头的定义
  6. 为什么阿里规约手册要求谨慎使用Arrays.asList方法
  7. xadmin站点管理类
  8. JS弹出子窗口
  9. 2018年为什么要学习Linux?Linux运维的前景还好吗?
  10. IDEA 基本配置