Description

On February, 30th n students came in the Center for Training Olympiad Programmers (CTOP) of the Berland State University. They came one by one, one after another. Each of them went in, and before sitting down at his desk, greeted with those who were present in the room by shaking hands. Each of the students who came in stayed in CTOP until the end of the day and never left.

At any time any three students could join together and start participating in a team contest, which lasted until the end of the day. The team did not distract from the contest for a minute, so when another student came in and greeted those who were present, he did not shake hands with the members of the contest writing team. Each team consisted of exactly three students, and each student could not become a member of more than one team. Different teams could start writing contest at different times.

Given how many present people shook the hands of each student, get a possible order in which the students could have come to CTOP. If such an order does not exist, then print that this is impossible.

Please note that some students could work independently until the end of the day, without participating in a team contest.

Input

The first line contains integer n (1 ≤ n ≤ 2·105) — the number of students who came to CTOP. The next line contains n integers a1, a2, ..., an (0 ≤ ai < n), where ai is the number of students with who the i-th student shook hands.

Output

If the sought order of students exists, print in the first line "Possible" and in the second line print the permutation of the students' numbers defining the order in which the students entered the center. Number i that stands to the left of number j in this permutation means that the i-th student came earlier than the j-th student. If there are multiple answers, print any of them.

If the sought order of students doesn't exist, in a single line print "Impossible".

Sample Input

Input
5
2 1 3 0 1
Output
Possible
4 5 1 3 2
Input
9
0 2 3 4 1 1 0 2 2
Output
Possible
7 5 2 1 6 8 3 4 9
Input
4
0 2 1 1
Output
Impossible

 
题意:有n个人进一个房间,如果进来的时候,里面有人,他要与每个人都握一次手,当房间里的人数大于等于三人的时候,其中有三个人可以组队离开,现在给出每个人进来时握手的次数,要求输出进来的顺序,如果方案不唯一,任意输出
 
思路:我们可以直接模拟暴力输出,握手次数决定了顺序
 
 
 
 
 
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stack>
  5. #include <queue>
  6. #include <map>
  7. #include <set>
  8. #include <vector>
  9. #include <math.h>
  10. #include <algorithm>
  11. using namespace std;
  12. #define ls 2*i
  13. #define rs 2*i+1
  14. #define up(i,x,y) for(i=x;i<=y;i++)
  15. #define down(i,x,y) for(i=x;i>=y;i--)
  16. #define mem(a,x) memset(a,x,sizeof(a))
  17. #define w(a) while(a)
  18. #define LL long long
  19. const double pi = acos(-1.0);
  20. #define Len 63
  21. #define mod 19999997
  22. const int INF = 0x3f3f3f3f;
  23. int n,a[300000],ans[300000],len;
  24. vector<int> vec[300000];
  25. int main()
  26. {
  27. int i,j,k;
  28. scanf("%d",&n);
  29. {
  30. len = 0;
  31. up(i,1,n)
  32. {
  33. scanf("%d",&a[i]);
  34. vec[a[i]].push_back(i);
  35. }
  36. int now = 0,flag = 1;
  37. up(i,1,n)
  38. {
  39. w(now>=0 && vec[now].size()==0)
  40. now-=3;
  41. if(now<0)
  42. {
  43. flag = 0;
  44. break;
  45. }
  46. ans[len++] = vec[now].back();
  47. vec[now++].pop_back();
  48. }
  49. if(flag)
  50. {
  51. printf("Possible\n");
  52. printf("%d",ans[0]);
  53. up(i,1,len-1)
  54. printf(" %d",ans[i]);
  55. printf("\n");
  56. }
  57. else
  58. printf("Impossible\n");
  59. }
  60. return 0;
  61. }

CodeForces 534D Program B的更多相关文章

  1. 【codeforces 534D】Handshakes

    [题目链接]:http://codeforces.com/contest/534/problem/D [题意] n个人依次进入一个房间; 进进来的人会和房间里面没有组队的人握一次手; (这里的握手只计 ...

  2. CodeForces 468A Program F

    Description Little X used to play a card game called "24 Game", but recently he has found ...

  3. CodeForces 540C Program D

    Description You play a computer game. Your character stands on some level of a multilevel ice cave. ...

  4. Codeforce 水题报告(2)

    又水了一发Codeforce ,这次继续发发题解顺便给自己PKUSC攒攒人品吧 CodeForces 438C:The Child and Polygon: 描述:给出一个多边形,求三角剖分的方案数( ...

  5. Codeforces Round #443 (Div. 1) A. Short Program

    A. Short Program link http://codeforces.com/contest/878/problem/A describe Petya learned a new progr ...

  6. Codeforces Round #879 (Div. 2) C. Short Program

    题目链接:http://codeforces.com/contest/879/problem/C C. Short Program time limit per test2 seconds memor ...

  7. Codeforces Round #174 (Div. 1) B. Cow Program(dp + 记忆化)

    题目链接:http://codeforces.com/contest/283/problem/B 思路: dp[now][flag]表示现在在位置now,flag表示是接下来要做的步骤,然后根据题意记 ...

  8. Codeforces Round #443 (Div. 2) C. Short Program

    C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  9. Codeforces 879C/878A - Short Program

    传送门:http://codeforces.com/contest/879/problem/C 本题是一个位运算问题——位运算的等价变换. 假设位运算符“&”“|”“^”是左结合的,且优先级相 ...

随机推荐

  1. 反演dp经典

    咋一看,至少要用3^n才能做到. 但. 首先定义: 可以发现只要求出a' b' 那么直接可以得出c' 那么如何求a'呢 //dp求a',其实就是分别用[0,n)来更新a' ; i < n; i+ ...

  2. jQuery中其他

    hide:  隐藏 $('img').hide(); show:显示 $('img').show(); 单选多选下拉菜单 选中状态checked ($('.radio:checked')); 单选 ( ...

  3. swiper轮播图--兼容IE8

    //引入idangerous.swiper.min.js var mySwiper = new Swiper ('.swiper-container', { loop: true, paginatio ...

  4. 《Java程序设计》实验三 实验报告

    实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2 ...

  5. javaSE基础之记事本编程

    首先安装好jdk和jre,之后进行如下操作: 1. 将代码记事本---->cmd--->javac 文件名.java ----->java 文件名 如图: 2. 关于记事本文件属性的 ...

  6. 初学java之接口基础

    /* 长城牌电视机 联想奔月5008PC机 */ package st; //接口回调实例 interface ShowMessage { void 显示商标 (String s); } class ...

  7. XX宝面试题——JS部分

    1.sessionStorage .localStorage 和 cookie 之间的差别 sessionStorage 和 localStorage 是HTML5 Web Storage API 供 ...

  8. JAVA读取EXCEL文件异常Unable to recognize OLE stream

    异常: jxl.read.biff.BiffException: Unable to recognize OLE stream at jxl.read.biff.CompoundFile.<in ...

  9. Mysql多表关联删除操作

    直接看Sql即可: ;

  10. Mysql date_sub函数使用

    mysql中内置函数date_add和date_sub能对指定的时间进行增加或减少一个指定的时间间隔,语法如下: DATE_ADD(date,INTERVAL expr type) DATE_SUB( ...