#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cassert>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<string>
#include<queue>
#include<stack>
using namespace std;
#define MOD 1000000007
#define MOD2 998244353
#define INF ((1<<30)-1)
#define LINF (1LL<<60)
#define EPS (1e-10)
typedef long long Int;
typedef pair<Int, Int> P;

void ok(){
    cout << "Yes" << endl;
    exit(0);
}

void ng(){
    cout <<  "Impossible" << endl;
    exit(0);
}


int n;
int a[1 << 8];

vector<int> loops;

void entangle(int x){
    vector<int> loop;
    for(int i = n-1;i >= 0;i--){
        if((x >> i) % 2 == 0)continue;
        if(loop.empty()){
            loop.push_back(i+1);
            loop.push_back(-i-1);
        }
        else{
            vector<int> tmp;
            tmp.push_back(i+1);
            for(auto it = loop.begin();it != loop.end();it++)tmp.push_back(*it);
            tmp.push_back(i+1);
            tmp.push_back(-i-1);
            for(auto it = loop.rbegin();it != loop.rend();it++)tmp.push_back(*it);
            tmp.push_back(-i-1);
            loop = tmp;
        }
    }
    loop.push_back(INF);
    for(auto elem:loop)loops.push_back(elem);
}

void show(){
    cout << "Possible" << endl;
    vector<P> ps;
    ps.push_back(P(0,0));
    int nowx = 0, nowy = 0;
    for(int x:loops){
        if(x == INF){
            while(nowx > 0){
                ps.push_back(P(--nowx, nowy));
            }
            continue;
        }
        if(x > 0){
            while(nowx > x){
                ps.push_back(P(--nowx, nowy));
            }
            while(nowx < x-1){
                ps.push_back(P(++nowx, nowy));
            }
            ps.push_back(P(nowx,++nowy));
            if(nowx == x)ps.push_back(P(--nowx, nowy));
            else ps.push_back(P(++nowx, nowy));
            ps.push_back(P(nowx,--nowy));
        }
        if(x < 0){
            x = x * -1;
            while(nowx > x){
                ps.push_back(P(--nowx, nowy));
            }
            while(nowx < x-1){
                ps.push_back(P(++nowx, nowy));
            }
            if(nowx == x)ps.push_back(P(--nowx, nowy));
            else ps.push_back(P(++nowx, nowy));
        }
    }
    cout << ps.size() - 1 << endl;
    for(auto p:ps){
        cout << p.first << " " << p.second << endl;
    }
}

int main(){
    cin >> n;
    for(int i = 0;i < (1<<n);i++){
        scanf("%1d", a+i);
        bool bad=false;
        if(a[i] == 0)bad = true;
        for(int j = 0;j < i;j++){
            if((j & i) != j)continue;
            if(a[i] == 1 && a[j] == 0){
                ng();                    
            }
            if(a[j] == 0)bad = false;
        }
        if(bad){
            entangle(i);
        }
    }
    show();
    return 0;
}