#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

vvi adj, comps;

vi instack, lowlink, dfn, comp, parent;
bool points[1000];
stack<int>stk;
int ndfn;

void tarjan(int node)
{
	lowlink[node] = dfn[node] = ndfn++;
	instack[node] = 1;
	stk.push(node);

	FOR(i, 0, adj[node].size())
	{
		int ch = adj[node][i];
		if (dfn[ch] == -1)
		{
			tarjan(ch);

			lowlink[node] = min(lowlink[node], lowlink[ch]);
		}
		else if (instack[ch])
		{
			lowlink[node] = min(lowlink[node], dfn[ch]);
		}

	}
	if (lowlink[node] == dfn[node])
	{
		comps.pb(vi());
		int x = -1;
		while (x != node)
		{
			x = stk.top(); stk.pop();
			instack[x] = 0;
			comps.back().pb(x);
			comp[x] = comps.size() - 1;
		}
	}

}

int main()
{
	cl;

	string s;
	int lst = -1;
	ll n;

	char c;
	while (1)
	{
		cin >> c;
		if (c == '=')
		{
			cin >> n;
			break;
		}
		else
		{
			if (c == '+')
			{
				s += c;
				lst = s.size() - 1;
			}
			else
				s += c;
		}
	}

	string k;

	bool v = 0;
	FOR(i, 0, s.size())
	{
		if (i == lst)
		{
			v = 1;
			i+=2;
		}
		k += s[i];

	}

	if (s.size() == 1)
	{
		cout << "Possible\n";
		cout << n;
		cout << " = ";
		cout << n << endl;
		return 0;
	}
	if (lst == -1)
	{
		return cout << "Impossible\n",0;
	}

	if (v)
		k += '+', k += '?';

	ll sum = 1;

	string res;

	for (int i = 1; i <= k.size()-2; i += 2)
	{

		if (k[i] == '+')
		{
			sum++;
			res += '1';
			res += '+';
		}
		else if (k[i]=='-')
		{
			sum--;

			res += '1';
			res += '-';
		}
	}

	res += '1';
	res += '+';
	ll dif = n - sum;
	if (dif <= 0)
	{
		return cout << "Impossible\n", 0;
	}
	cout << "Possible\n";
	res += to_string(dif);
	FOR(i, 0, res.size())
	{
		cout << res[i];
		if ((i+1)<res.size())
		if (res[i + 1] == '0')
		{
			cout << res[i + 1];
			i++;
		}
		cout << ' ';
	}
	cout << "= ";
	cout << n << endl;

}


#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

vvi adj, comps;

vi instack, lowlink, dfn, comp, parent;
bool points[1000];
stack<int>stk;
int ndfn;

void tarjan(int node)
{
	lowlink[node] = dfn[node] = ndfn++;
	instack[node] = 1;
	stk.push(node);

	FOR(i, 0, adj[node].size())
	{
		int ch = adj[node][i];
		if (dfn[ch] == -1)
		{
			tarjan(ch);

			lowlink[node] = min(lowlink[node], lowlink[ch]);
		}
		else if (instack[ch])
		{
			lowlink[node] = min(lowlink[node], dfn[ch]);
		}

	}
	if (lowlink[node] == dfn[node])
	{
		comps.pb(vi());
		int x = -1;
		while (x != node)
		{
			x = stk.top(); stk.pop();
			instack[x] = 0;
			comps.back().pb(x);
			comp[x] = comps.size() - 1;
		}
	}

}

int main()
{
	cl;

	string s;
	int lst = -1;
	ll n;

	char c;
	while (1)
	{
		cin >> c;
		if (c == '=')
		{
			cin >> n;
			break;
		}
		else
		{
			if (c == '+')
			{
				s += c;
				lst = s.size() - 1;
			}
			else
				s += c;
		}
	}

	string k;

	bool v = 0;
	FOR(i, 0, s.size())
	{
		if (i == lst)
		{
			v = 1;
			i+=2;
		}
		k += s[i];

	}

	if (s.size() == 1)
	{
		cout << "Possible\n";
		cout << n;
		cout << " = ";
		cout << n << endl;
		return 0;
	}
	if (lst == -1)
	{
		return cout << "Impossible\n",0;
	}

	if (v)
		k += '+', k += '?';

	ll sum = 1;
	cout << "Possible\n";
	string res;

	for (int i = 1; i <= k.size()-2; i += 2)
	{

		if (k[i] == '+')
		{
			sum++;
			res += '1';
			res += '+';
		}
		else if (k[i]=='-')
		{
			sum--;

			res += '1';
			res += '-';
		}
	}

	res += '1';
	res += '+';
	ll dif = n - sum;
	res += to_string(dif);
	FOR(i, 0, res.size())
	{
		cout << res[i];
		if ((i+1)<res.size())
		if (res[i + 1] == '0')
		{
			cout << res[i + 1];
			i++;
		}
		cout << ' ';
	}
	cout << "= ";
	cout << n << endl;

}


#include <bits/stdc++.h>
using namespace std;

int n, cur, s, pos, neg;
char ch, p;
queue<int> positive, negative;
vector<char> sign;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);

    cin >> ch;
    p = ch;
    while (1) {
        if (p == '=') {
            cin >> n;
            break;
        }
        else {
            cin >> ch;
            if (p == '+') {
                pos++;
                sign.push_back('+');
            }
            else if (p == '-') {
                neg++;
                sign.push_back('-');
            }

            p = ch;
        }
    }

    int left = (n + neg);

    pos++;
    for (int i = 0; i < pos; i++) {
        positive.push(max(1, min(n, left - (pos - i) + 1)));
        cur += max(1, min(n, left - (pos - i) + 1));
        left = (n + neg) - cur;
    }

    left = cur - n;
    for (int i = 0; i < neg; i++) {
        negative.push(max(1, min(n, left - (neg - i) + 1)));
        cur -= max(1, min(n, left - (neg - i) + 1));
        left = cur - n;
    }

    if (cur != n) {
        cout << "Impossible\n";
        return 0;
    }

    cout << "Possible\n";
    cout << positive.front();
    positive.pop();
    for (int i = 0; i < sign.size(); i++) {
        cout << " " << sign[i] << " ";
        if (sign[i] == '+') {
            cout << positive.front();
            positive.pop();
        }
        else {
            cout << negative.front();
            negative.pop();
        }
    }

    cout << " = " << n << '\n';

    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int n, cur, s, pos, neg;
char ch, p;
vector<int> ans;
vector<char> sign;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);

    bool alone = 1;
    cin >> ch;
    p = ch;
    while (1) {
        if (p == '=') {
            cin >> n;
            break;
        }
        else {
            cin >> ch;
            if (p == '+') {
                alone = 0;
                pos++;
                sign.push_back('+');
            }
            else if (p == '-') {
                alone = 0;
                neg++;
                sign.push_back('-');
            }

            p = ch;
        }
    }

    if (alone) {
        cout << "Possible\n" << n << " = " << n << '\n';
        return 0;
    }

    cur = max(1, min(n, n + neg - n));
    int left = (n + neg) - cur;

    for (int i = 0; i < sign.size(); i++) {
        if (sign[i] == '+') {
            ans.push_back(max(1, min(n, left - pos + 1)));
            cur += max(1, min(n, left - pos + 1));
            pos--;
        }
        else {
            ans.push_back(1);
        }

        left = (n + neg) - cur;
    }

    if (cur - neg != n) {
        cout << "Impossible\n";
        return 0;
    }

    cout << "Possible\n" << max(1, min(n, n + neg - n));
    for (int i = 0; i < sign.size(); i++) {
        cout << " " << sign[i] << " " << ans[i];
    }

    cout << " = " << n << '\n';

    return 0;
}


#include <bits/stdc++.h>
using namespace std;

int n, cur, s;
char ch, p;
vector<char> sign;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    // freopen("input.txt", "r", stdin);
    // freopen("output.txt", "w", stdout);

    cin >> ch;
    p = ch;
    while (1) {
        if (p == '=') {
            cin >> n;
            break;
        }
        else {
            cin >> ch;
            if (p == '+') {
                cur++;
                sign.push_back('+');
            }
            else if (p == '-') {
                cur--;
                sign.push_back('-');
            }

            p = ch;
        }
    }

    s = n - cur;
    if (n == 123456) {
        cout << "s: " << s << '\n';
    }
    if (s < 1 || s > n) {
        cout << "Impossible\n";
        return 0;
    }

    for (int i = 0; i < sign.size(); i++) {
        if (sign[i] == '+') {
            s++;
        }
        else {
            s--;
        }
    }

    if (s != n) {
        cout << "Impossible\n";
    }
    else {
        cout << "Possible\n";
        cout << n - cur;
        for (int i = 0; i < sign.size(); i++) {
            cout << " " << sign[i] << " " << 1;
        }

        cout << " = " << n << '\n';
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;

const int OO = 0x3f3f3f3f ,N = 2e5+5 ,mod = 1e9+9 ;
#define read(FILE)  freopen(FILE, "r", stdin);
#define write(FILE) freopen(FILE, "w", stdout);
#define BeatMeIFUCAN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

string str ;
int p=1 ,m ,q ,n ,rem ,sum ,indx ;
vector<int> pls ,mns ;
void getn(){
    stringstream CIN ;
    CIN<<str;
    string tmp;
    while(CIN>>tmp){
        if(tmp=="+"||tmp=="-"||tmp=="?"||tmp=="=") continue;
        stringstream num ;
        num<<tmp;
        num>>n;
    }
}
int main(){
    getline(cin,str);
    for(char ch:str){
        if(ch=='?') ++q ;
        else if(ch=='+') ++p ;
        else if(ch=='-') ++m ;
    }
    getn();
    rem=n;
    while(m--){ mns.push_back(1); ++rem; }
    for(int i=1;i<=p;++i){
        int x=p-i;
        if(rem-x>=n){
            pls.push_back(n);
            rem-=n;
        }
        else if(rem-x>=1&&rem-x<=n){
            pls.push_back(rem-x);
            rem=x;
        }
        else{
            int tmp = 1-(rem-x) ;
            while(tmp&&indx<mns.size()){
                int ss=min(tmp,n-mns[indx]);
                tmp-=ss ,mns[indx]+=ss ,rem+=ss ;
                if(mns[indx]==n) ++indx;
            }
            if(tmp) exit(puts("Impossible"));
            pls.push_back(1) ,--rem ;
        }
    }
    for(int go:pls){
        sum+=go;
        //cout<<go<<" ";
        if(go>n)exit(puts("Impossible"));
    }
    for(int go:mns) sum-=go;
    if(sum<n) exit(puts("Impossible"));
    int x=sum-n;
    for(int i=0;i<mns.size();++i){
        if(x>=n-mns[i]) mns[i]=n ,x-=n-mns[i];
        else if(x>=1) mns[i]=x ,x=0 ;
        if(!x) break;
    }
    if(x) exit(puts("Impossible"));
    puts("Possible");
    char lst='+';
    for(char go:str){
        if(go=='?'){
            if(lst=='+'){
                cout<<pls.back();
                pls.pop_back();
            }
            else if(lst=='-'){
                cout<<mns.back();
                mns.pop_back();
            }
            continue;
        }
        else if(go=='+'||go=='-') lst=go;
        cout<<go;
    }
    return 0 ;
}


#include <bits/stdc++.h>
using namespace std;

const int OO = 0x3f3f3f3f ,N = 2e5+5 ,mod = 1e9+9 ;
#define read(FILE)  freopen(FILE, "r", stdin);
#define write(FILE) freopen(FILE, "w", stdout);
#define BeatMeIFUCAN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

string str ;
int p=1 ,m ,q ,n ,rem ,sum ;
vector<int> pls ,mns ;
void getn(){
    stringstream CIN ;
    CIN<<str;
    string tmp;
    while(CIN>>tmp){
        if(tmp=="+"||tmp=="-"||tmp=="?"||tmp=="=") continue;
        stringstream num ;
        num<<tmp;
        num>>n;
    }
}
int main(){
    getline(cin,str);
    for(char ch:str){
        if(ch=='?') ++q ;
        else if(ch=='+') ++p ;
        else if(ch=='-') ++m ;
    }
    getn();
    rem=n;
    while(m--){ mns.push_back(1); ++rem; }
    for(int i=1;i<=p;++i){
        int x=p-i;
        if(rem-x>=n){
            pls.push_back(n);
            rem-=n;
        }
        else if(rem-x>=1&&rem-x<=n){
            pls.push_back(rem-x);
            rem=x;
        }
        else exit(puts("Impossible"));
    }
    for(int go:pls){
        sum+=go;
        if(go>n)exit(puts("Impossible"));
    }
    for(int go:mns) sum-=go;
    if(sum<n) exit(puts("Impossible"));
    int x=sum-n;
    for(int i=0;i<mns.size();++i){
        if(x>=n-mns[i]) mns[i]=n ,x-=n-mns[i];
        else if(x>=1) mns[i]=x ,x=0 ;
        if(!x) break;
    }
    if(x) exit(puts("Impossible"));
    puts("Possible");
    char lst='+';
    for(char go:str){
        if(go=='?'){
            if(lst=='+'){
                cout<<pls.back();
                pls.pop_back();
            }
            else if(lst=='-'){
                cout<<mns.back();
                mns.pop_back();
            }
            continue;
        }
        else if(go=='+'||go=='-') lst=go;
        cout<<go;
    }
    return 0 ;
}


#include <bits/stdc++.h>
using namespace std;

const int OO = 0x3f3f3f3f ,N = 2e5+5 ,mod = 1e9+9 ;
#define read(FILE)  freopen(FILE, "r", stdin);
#define write(FILE) freopen(FILE, "w", stdout);
#define BeatMeIFUCAN ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);

string str ;
int p=1 ,m ,q ,n ,rem ,sum ;
vector<int> pls ,mns ;
void getn(){
    stringstream CIN ;
    CIN<<str;
    string tmp;
    while(CIN>>tmp){
        if(tmp=="+"||tmp=="-"||tmp=="?"||tmp=="=") continue;
        stringstream num ;
        num<<tmp;
        num>>n;
    }
}
int main(){
    getline(cin,str);
    for(char ch:str){
        if(ch=='?') ++q ;
        else if(ch=='+') ++p ;
        else if(ch=='-') ++m ;
    }
    getn();
    rem=n;
    while(m--){ mns.push_back(1); ++rem; }
    for(int i=1;i<=p;++i){
        int x=p-i;
        if(rem-x>=n){
            pls.push_back(n);
            rem-=n;
        }
        else if(rem-x>=1&&rem-x<=n){
            pls.push_back(rem-x);
            rem=x;
        }
        else exit(puts("Impossible"));
    }
    for(int go:pls){
        sum+=go;
        if(go>n)exit(puts("Impossible"));
    }
    for(int go:mns) sum-=go;
    if(sum!=n) exit(puts("Impossible"));
    puts("Possible");
    char lst='+';
    for(char go:str){
        if(go=='?'){
            if(lst=='+'){
                cout<<pls.back();
                pls.pop_back();
            }
            else if(lst=='-'){
                cout<<mns.back();
                mns.pop_back();
            }
            continue;
        }
        else if(go=='+'||go=='-') lst=go;
        cout<<go;
    }
    return 0 ;
}


#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
typedef long long ll;
typedef long double ld;

using namespace std;

int main()
{
   FAST/**/

   ll cp = 0, cn = 0;
   string s;
   ll sign = 1;
   vector<ll> posi, negi;
   ll ind = 0;
   ll n = 0;
   while(1)
   {
       cin>>s;
       if(s.size() == 1 && s == "?")
       {
           if(sign == 1)
           {
               cp++;
               posi.push_back(ind);
           }
           else
           {
               cn++;
               negi.push_back(ind);
           }

           ind++;

           continue;
       }

       if(s == "+")
       {
           sign = 1;
           continue;
       }

       if(s == "-")
       {
           sign = -1;
           continue;
       }

       if(s == "=")
       {
           string t;
           cin>>t;

           for(ll i=0;i<t.length();i++)
                n = 10*n + (t[i] - 48);
           break;
       }
   }

   ll mini = cp - n*cn;
   ll maxi = cp*n - cn;

   if(maxi<n || mini>n)
   {
       cout<<"Impossible";
       return 0;
   }

   cout<<"Possible"<<"\n";

   ll temp = max((n+cn)/cp, (ll)1);
   ll al = ceil(((ld)cp-n)/cn);
   if(al<=0)
        al = 1;

   ll temp1 = n-temp*cp + al*cn;
   //cout<<"temp = "<<temp<<"\n";
   ll arr[posi.size() + negi.size()];
   for(ll i=0;i<posi.size();i++)
   {
       arr[posi[i]] = temp;
       if(temp1>0)
            arr[posi[i]]++, temp1--;
   }

   for(ll i=0;i<negi.size();i++)
        arr[negi[i]] = -al;

   for(ll i=0;i<posi.size() + negi.size();i++)
   {
       if(arr[i]>0)
       {
           if(i!=0)
           {
               cout<<" + "<<arr[i];
               continue;
           }

           cout<<arr[i];
       }

       else
       {
           cout<<" - "<<ll(abs(arr[i]));
           continue;
       }
   }

   cout<<" = "<<n<<"\n";

   return 0;
}


#include <bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
typedef long long ll;
typedef long double ld;

using namespace std;

int main()
{
   FAST/**/

   ll cp = 0, cn = 0;
   string s;
   ll sign = 1;
   vector<ll> posi, negi;
   ll ind = 0;
   ll n = 0;
   while(1)
   {
       cin>>s;
       if(s.size() == 1 && s == "?")
       {
           if(sign == 1)
           {
               cp++;
               posi.push_back(ind);
           }
           else
           {
               cn++;
               negi.push_back(ind);
           }

           ind++;

           continue;
       }

       if(s == "+")
       {
           sign = 1;
           continue;
       }

       if(s == "-")
       {
           sign = -1;
           continue;
       }

       if(s == "=")
       {
           string t;
           cin>>t;

           for(ll i=0;i<t.length();i++)
                n = 10*n + (t[i] - 48);
           break;
       }
   }

   ll mini = cp - n*cn;
   ll maxi = cp*n - cn;

   if(maxi<n || mini>n)
   {
       cout<<"Impossible";
       return 0;
   }

   cout<<"Possible"<<"\n";

   ll temp = (n+cn)/cp;
   ll temp1 = (n+cn)%cp;
   ll arr[posi.size() + negi.size()];
   for(ll i=0;i<posi.size();i++)
   {
       arr[posi[i]] = temp;
       if(temp1>0)
            arr[posi[i]]++, temp1--;
   }

   for(ll i=0;i<negi.size();i++)
        arr[negi[i]] = -1;

   for(ll i=0;i<posi.size() + negi.size();i++)
   {
       if(arr[i]>0)
       {
           if(i!=0)
           {
               cout<<" + "<<arr[i];
               continue;
           }

           cout<<arr[i];
       }

       else
       {
           cout<<" - "<<ll(abs(arr[i]));
           continue;
       }
   }

   cout<<" = "<<n<<"\n";

   return 0;
}


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1, sumt = 0;
    num ini;
    ini.i = 0, ini.sig = true;
    //pos.push_back(ini);
    char k;
    cin>>k;
    if(k == '-')
    {
        cin>>k;
        neg.push_back(ini);
    }
    else
        pos.push_back(ini);
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(neg.size() == 0 && pos.size() <= N)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        if(pos.size() > 1)
            cout<<" + ";
        cout<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    if(A < N || B > N || pos.size() <= 1)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }

    int a = 0, b = 0, La = pos.size(), Lb = neg.size();
    for(int i = 0;i<La;i++)
        pos[i].val = N;
    for(int i = 0;i<Lb;i++)
        neg[i].val = 1;
    int V = N*pos.size() - neg.size() - N;
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    cout<<"Possible"<<endl;
    pos[0].val -= min(N-1,V);
    V-=min(N-1,V);
    cout<<pos[0].val;
    a = 1;
    while(a < La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            //cout<<"  "<<a<<" + = "<<pos[a].val<<" , "<<V<<" , "<<N<<" = ";
            pos[a].val -= min(N-1,V);
            //cout<<pos[a].val<<endl;
            V-=min(N-1,V);
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            neg[b].val += min(N-1,V);
            V -= min(N-1,V);
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? + ? - ? - ? - ? - ? + ? + ? = 4

*/


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1;
    num ini;
    ini.i = 0, ini.sig = true;
    pos.push_back(ini);
    char k;
    cin>>k;
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(A <= 0 || B > N)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }
    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        if(da < db)
        {
            int d = min(db-da,N);
            pos[a].val = d+1;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N);
            neg[b].val = d+1;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    pos[La].val = N;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1, sumt = 0;
    num ini;
    ini.i = 0, ini.sig = true;
    //pos.push_back(ini);
    char k;
    cin>>k;
    if(k == '-')
    {
        cin>>k;
        neg.push_back(ini);
    }
    else
        pos.push_back(ini);
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(neg.size() == 0 && pos.size() <= N)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        if(pos.size() > 1)
            cout<<" + ";
        cout<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    if(A < N || B > N || pos.size() == 1)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }

    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        //cout<<a<<" , "<<b<<" | "<<da<<" , "<<db<<endl;
        if(da < db)
        {
            int d = min(db-da,N-1) + 1;
            pos[a].val = d;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N-1) +1;
            neg[b].val = d;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    int lN = N;
    //for(;a<La;a++)
    //    pos[a].val = 1, lN--;
    pos[La].val = lN;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? + ? - ? - ? - ? - ? + ? + ? = 4

*/


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1;
    num ini;
    ini.i = 0, ini.sig = true;
    pos.push_back(ini);
    char k;
    cin>>k;
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(A <= 0 || B > N)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }
    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        if(da < db)
        {
            int d = min(db-da,N-1);
            pos[a].val = d+1;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N-1);
            neg[b].val = d+1;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    pos[La].val = N;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1;
    num ini;
    ini.i = 0, ini.sig = true;
    //pos.push_back(ini);
    char k;
    cin>>k;
    if(k == '-')
    {
        cin>>k;
        neg.push_back(ini);
    }
    else
        pos.push_back(ini);
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(neg.size() == 0 && pos.size() <= N)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        if(pos.size() > 1)
            cout<<" + ";
        cout<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    if(A <= 0 || B > N || pos.size() == 1)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }

    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        if(da < db)
        {
            int d = min(db-da,N-1);
            pos[a].val = d+1;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N-1);
            neg[b].val = d+1;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    pos[La].val = N;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? - ?  = 4

*/


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1;
    num ini;
    ini.i = 0, ini.sig = true;
    pos.push_back(ini);
    char k;
    cin>>k;
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(A <= 0 || B > N)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }
    if(neg.size() == 0)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        if(pos.size() > 1)
            cout<<" + ";
        cout<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        if(da < db)
        {
            int d = min(db-da,N-1);
            pos[a].val = d+1;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N-1);
            neg[b].val = d+1;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    pos[La].val = N;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? + ? + ? = 3

*/


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1;
    num ini;
    ini.i = 0, ini.sig = true;
    pos.push_back(ini);
    char k;
    cin>>k;
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(A <= 0 || B > N)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }
    if(neg.size() == 0)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        cout<<" + "<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        if(da < db)
        {
            int d = min(db-da,N-1);
            pos[a].val = d+1;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N-1);
            neg[b].val = d+1;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    pos[La].val = N;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? + ? + ? = 3

*/


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1, sumt = 0;
    num ini;
    ini.i = 0, ini.sig = true;
    //pos.push_back(ini);
    char k;
    cin>>k;
    if(k == '-')
    {
        cin>>k;
        neg.push_back(ini);
    }
    else
        pos.push_back(ini);
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(neg.size() == 0 && pos.size() <= N)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        if(pos.size() > 1)
            cout<<" + ";
        cout<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    if(A <= 0 || B > N || pos.size() == 1)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }

    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        //cout<<a<<" , "<<b<<" | "<<da<<" , "<<db<<endl;
        if(da < db)
        {
            int d = min(db-da,N-1) + 1;
            pos[a].val = d;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N-1) +1;
            neg[b].val = d;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    int lN = N;
    //for(;a<La;a++)
    //    pos[a].val = 1, lN--;
    pos[La].val = lN;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? + ? - ? - ? - ? - ? + ? + ? = 4

*/


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1;
    num ini;
    ini.i = 0, ini.sig = true;
    pos.push_back(ini);
    char k;
    cin>>k;
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(neg.size() == 0 && pos.size() <= N)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        if(pos.size() > 1)
            cout<<" + ";
        cout<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    if(A <= 0 || B > N || pos.size() == 1)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }

    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La || b < Lb)
    {
        int da = La-a, db = Lb-b;
        if(da < db)
        {
            int d = min(db-da,N-1);
            pos[a].val = d+1;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N-1);
            neg[b].val = d+1;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    pos[La].val = N;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? - ?  = 4

*/


#include <iostream>
#include <vector>

using namespace std;
struct num{
    int val;
    bool sig;
    int i;
};
int N;
vector<num> pos,neg;
int main()
{
    bool seguir = true;
    int i = 1, sumt = 0;
    num ini;
    ini.i = 0, ini.sig = true;
    //pos.push_back(ini);
    char k;
    cin>>k;
    if(k == '-')
    {
        cin>>k;
        neg.push_back(ini);
    }
    else
        pos.push_back(ini);
    while(seguir)
    {
        //cout<<i<<endl;
        char c;
        cin>>c;
        if(c == '=')
        {
            cin>>N;
         //   cout<<N<<" es "<<endl;
            seguir = false;
            break;
        }
        else if(c == '+')
        {
            num v;
        //    cout<<i<<" = +"<<endl;
            v.i = i;
            v.sig = true;
            pos.push_back(v);
        }
        else
        {
            num v;
            v.i = i;
            v.sig = false;
            neg.push_back(v);
        }
        i++;
        cin>>c;
    }
    //cout<<pos.size()<<" - "<<neg.size()<<endl;
    int A = N*pos.size()-neg.size();
    int B = pos.size() - N*neg.size();
    if(neg.size() == 0 && pos.size() <= N)
    {
        cout<<"Possible"<<endl;
        if(pos.size() > 1)
            cout<<1;
        for(int i = 1;i<pos.size()-1;i++)
            cout<<" + 1";
        if(pos.size() > 1)
            cout<<" + ";
        cout<<(N-pos.size()+1)<<" = "<<N<<endl;
        return 0;
   }
    if(A <= 0 || B > N || pos.size() == 1)
    {
        cout<<"Impossible"<<endl;
        return 0;
    }

    int a = 0, b = 0, La = pos.size() -1, Lb = neg.size();
    ini.i = 1000;
    pos.push_back(ini),neg.push_back(ini);
    while(a < La && b < Lb)
    {
        int da = La-a, db = Lb-b;
        if(da < db)
        {
            int d = min(db-da,N);
            pos[a].val = d;
            a++;
            for(int i = 0;i<d;i++)
                neg[b+i].val = 1;
            b+=d;
        }
        else if(db < da)
        {
            int d = min(da-db,N);
            neg[b].val = d;
            b++;
            for(int i = 0;i<d;i++)
                pos[a+i].val = 1;
            a+=d;
        }
        else
            pos[a].val = neg[b].val = 1, a++,b++;
    }
    int lN = N;
    for(;a<La;a++)
        pos[a].val = 1, lN--;
    pos[La].val = lN;
    a = 1, b = 0;
    cout<<"Possible"<<endl;
    cout<<pos[0].val;
    while(a <= La || b < Lb)
    {
        //cout<<a<<" - "<<La<<" y "<<b<<" - "<<Lb<<endl;
        //cout<<a<< " = "<<pos[a].i<<" vs "<<b<<" = "<<neg[b].i<<endl;
        if(a <=La && pos[a].i < neg[b].i)
        {
            cout<<" + "<<pos[a].val;
            a++;
        }
        else
        {
            cout<<" - "<<neg[b].val;
            b++;
        }
    }
    cout<<" = "<<N<<endl;
}
/*
? - ?  = 4

*/


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long long LL;
typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;

#ifdef DEBUG
    #define cek(x) cout<<x
#else
    #define cek(x) if(false){}
#endif // DEBUG

#define fi first
#define se second
#define INF 1000000000
#define INFLL 1000000000000000000LL
#define EPS 1e-9
#define PI acos(-1.0)
#define pb push_back
#define TC() while(tc--)
#define FOR(i,n) for(int i=0;i<n;i++)
#define FORN(i,n) for(int i=0;i<=n;i++)
#define REP(i,a,b,c) for(int i=a;i<b;i+=c)
#define REPN(i,a,b,c) for(int i=a;i<=b;i+=c)
#define reset(a,b) memset(a,b,sizeof(a))
#define sc(x) scanf("%d",&x)

int main(void){
	string str;
	int min, plus;
	min = plus = 0;
	vector<int> v;
	while(true){
		cin >> str;
		if(str[0] == '-'){
			v.push_back(-1);
			min++;
		}else if(str[0] == '+'){
			v.push_back(1);
			plus++;
		}else if(str[0] == '=')break;

	}

	int n;
	cin >> n;

	for(int i = n;i>=1;i--){
		int smallest = i - (n*min) + (1*plus);
		int largest = i + n*plus - (min);
		if(smallest <= n && n <= largest){
			printf("Possible\n%d", i);
			int plusmin = n - i - plus + min;
			for(int j = 0;j<v.size();j++){
				if(v[j] == 1){
					printf(" + ");
					if(plusmin > 0){
						if(n < plusmin + 1){
							printf("%d", n);
							plusmin -= (n - 1);
						}else{
							printf("%d", plusmin + 1);
							plusmin = 0;
						}
					}else{
						printf("1");
					}
				}else{
					printf(" - ");
					if(plusmin < 0){
						if(n < abs(plusmin) + 1){
							printf("%d", n);
							plusmin += (n-1);
						}else{
							printf("%d", abs(plusmin) + 1);
							plusmin = 0;
						}
					}else{
						printf("1");
					}
				}
			}
			printf(" = %d", n);
			return 0;
		}
	}

	printf("Impossible");

    return 0;
}


#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long long LL;
typedef pair<int,int> ii;
typedef vector<ii> vii;
typedef vector<int> vi;

#ifdef DEBUG
    #define cek(x) cout<<x
#else
    #define cek(x) if(false){}
#endif // DEBUG

#define fi first
#define se second
#define INF 1000000000
#define INFLL 1000000000000000000LL
#define EPS 1e-9
#define PI acos(-1.0)
#define pb push_back
#define TC() while(tc--)
#define FOR(i,n) for(int i=0;i<n;i++)
#define FORN(i,n) for(int i=0;i<=n;i++)
#define REP(i,a,b,c) for(int i=a;i<b;i+=c)
#define REPN(i,a,b,c) for(int i=a;i<=b;i+=c)
#define reset(a,b) memset(a,b,sizeof(a))
#define sc(x) scanf("%d",&x)

int main(void){
	string str;
	int min, plus;
	min = plus = 0;
	vector<int> v;
	while(true){
		cin >> str;
		if(str[0] == '-'){
			v.push_back(-1);
			min++;
		}else if(str[0] == '+'){
			v.push_back(1);
			plus++;
		}else if(str[0] == '=')break;

	}

	int n;
	cin >> n;

	for(int i = n;i>=1;i--){
		int smallest = i - (n*min) + (1*plus);
		int largest = i + n*plus - (min);
		if(smallest <= n && n <= largest){
			printf("Possible\n%d", i);
			int plusmin = n - i - plus + min;
			for(int j = 0;j<v.size();j++){
				if(v[j] == 1){
					printf(" + ");
					if(plusmin > 0){
						printf("%d", 1 + plusmin);
						plusmin = 0;
					}else{
						printf("1");
					}
				}else{
					printf(" - ");
					if(plusmin < 0){
						printf("%d", 1 + abs(plusmin));
						plusmin = 0;
					}else{
						printf("1");
					}
				}
			}
			printf(" = %d", n);
			return 0;
		}
	}

	printf("Impossible");

    return 0;
}


#include<bits/stdc++.h>
#define ll long long int
#define fast ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define pb push_back

using namespace std;

int main()
{ fast;
string s; getline(cin,s);

ll n,pos=1,neg=0,x=s.size();

for(ll i=1;i<x;i++)
{
    if(s[i]=='?')
    {
        if(s[i-2]=='+')
        pos++;
        else
        neg++;
    }

    if(s[i]=='=')
    {
        string t=s.substr(i+1);
        n=stoi(t);
        break;
    }

}

ll mx=pos*n-neg,mn=pos-n*neg;

if( n>mx or n<mn )
cout<<"Impossible"<<endl;

else
{
    cout<<"Possible"<<endl;
     ll req=n+neg,pos1=pos;
    vector<ll> p;

    while(p.size()<pos1)
   {
    ll w= min(req-pos+1,n);
    p.pb(w);
    req-=w;
    pos--;
   }

   ll j=1;
   cout<<p[0];

   for(ll i=1;i<x;i++)
   {
       if(s[i]=='?' and s[i-2]=='+')
       {cout<<p[j];
       j++;}

       else if(s[i]=='?' and s[i-2]=='-')
       cout<<1;
       else
       cout<<s[i];
   }

}

}


#include<bits/stdc++.h>
#define ll long long int
#define fast ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define pb push_back

using namespace std;

int main()
{ fast;
string s; getline(cin,s);

ll n,pos=1,neg=0,x=s.size();

for(ll i=1;i<x;i++)
{
    if(s[i]=='?')
    {
        if(s[i-2]=='+')
        pos++;
        else
        neg++;
    }

    if(s[i]=='=')
    {
        string t=s.substr(i+1);
        n=stoi(t);
        break;
    }

}

ll mx=pos*n-neg,mn=pos-n*neg;

if( n>mx or n<mn )
cout<<"Impossible"<<endl;

else
{
    cout<<"Possible"<<endl;

    if(pos-neg>n)
    {
      ll req=pos-n, neg1=neg;
      vector<ll> nn;

      while(nn.size()<neg1)
      {
          ll w=min(req-neg+1,n);
          nn.pb(w);
          req-=w;
          neg--;
      }

        ll j=0;
        cout<<1;

        for(ll i=1;i<x;i++)
   {
       if(s[i]=='?' and s[i-2]=='+')
      cout<<1;

       else if(s[i]=='?' and s[i-2]=='-')
       {cout<<nn[j];
       j++;}
       else
       cout<<s[i];
   }
}

    else
    { ll req=n+neg,pos1=pos;
    vector<ll> p;

    while(p.size()<pos1)
   {
    ll w= min(req-pos+1,n);
    p.pb(w);
    req-=w;
    pos--;
   }

   ll j=1;
   cout<<p[0];

   for(ll i=1;i<x;i++)
   {
       if(s[i]=='?' and s[i-2]=='+')
       {cout<<p[j];
       j++;}

       else if(s[i]=='?' and s[i-2]=='-')
       cout<<1;
       else
       cout<<s[i];
   }

}}

}


#include<bits/stdc++.h>
using namespace std;

char s[100];
int main() {
    int n,k=0,ps=1,ng=0;
    while (true) {
        char c;
        cin>>c;
        if(c=='=') break;
        if(c=='+')ps++;
        if(c=='-')ng++;
		if(c!='?')s[k++]=c;
    }
	cin>>n;
    //cout<<s<<endl;
    if((ps-n*ng>n) || (n*ps-ng<n)){
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<endl;
    int sum=0;
    for(int i=0;i<k;i++) {
        int sn=1;
        if(i>0 && s[i - 1]=='-'){sn=-1;ng--;}
        if(sn==1)ps--;
        for(int j=1;j<=n;j++)
            if((sum+j*sn+(ps-n*ng)<=n) && (sum+j*sn+(n*ps-ng)>=n)){
                cout<<j<<" "<<s[i]<<" ";
                sum+=j*sn;
                break;
            }
	}
	cout<<abs(n-sum)<<" "<<"="<<" "<<n;
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define ll long long int

int main() {
	string s;
	getline(cin,s);
	int neg=0,pos=0,dig=0,ind;
	for(int i=0;i<s.size();i++){
		if(s[i]=='-')neg++;
		else if(s[i]=='+')pos++;
		else if(s[i]=='='){
			i+=2;
			ind=i;
			if(s[i]!=' '){
				while(i<s.size()){
					dig++;
					i++;
				}
			}
		}
	}
	ll n=0;
	while(dig--){
		n+=(s[ind++]-'0')*(ll)pow(10,dig);
	}
	pos++;
	int term=neg+pos;
	int tot=n+neg;
	int rem=tot-pos;
	int need=rem/n;
	if(rem%n!=0)need++;
	//cout<<pos<<" "<<neg<<" "<<n<<" "<<tot<<endl;
	if(need>pos || (pos-neg)>n || (n*pos-neg)<n){
		cout<<"Impossible";
		return 0;
	}
	cout<<"Possible\n";
	//cout<<rem<<endl;
	//if(rem>=n)cout<<n,need--,rem-=(n-1);
	for(int i=0;i<s.size();i++){
		int f=0;
		if(s[i]=='?'){
			if(s[i-2]=='-')cout<<1;
			else{
				if(rem>=n)cout<<n,need--,rem-=(n-1);
				else if(rem>0 && rem<n) cout<<1+rem,rem=0;
				else cout<<1;
			}
			f=1;
		}
		if(!f)cout<<s[i];
	}
	return 0;
}


#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define MAX 1000005
#define MOD 1000000007
#define pb push_back
#define mp make_pair
#define pii pair<ll,ll>
#define vi vector<ll>
#define vp vector<pii >
#define vs vector<string>
#define all(v) v.begin(),v.end()
#define lb(v,x) lower_bound(all(v),x)
#define ub(v,x) upper_bound(all(v),x)
#define F first
#define S second
#define FOR(i,a,b) for(ll i=a;i<b;++i)
#define ROF(i,a,b) for(ll i=a;i>=b;i--)
#define sz(x) (ll)x.size()
typedef long long ll;

using namespace std;

ll gcd(ll a,ll b){return (a==0)?b:gcd(b%a,a);}

int main()
{
    IOS
    char c;
    int p=1,m=0,n;
    vector<char> v;
    while(cin>>c){
        if(c=='+')p++,v.pb(c);
        else if(c=='-')m++,v.pb(c);
        else if(c=='=')break;
        else continue;
    }
    cin>>n;
    if(p-n*m>n || n*p-m<n)cout<<"Impossible"; //check range
    else{
        cout<<"Possible\n";
        int cur_s=0;
        FOR(i,0,sz(v)){
            int s;
            if(i==0 || v[i-1]=='+')s=1,p--;
            else s=-1,m--;
            FOR(j,1,n+1){
                if(cur_s + s*j +p -n*m<=n && cur_s + s*j + n*p - m >= n){
                    cout<<j<<" "<<v[i]<<" ";
                    cur_s+=s*j;
                    break;
                }
            }
        }
        cout<<abs(n-cur_s)<<" = "<<n;
    }

    return 0;
}


#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define MAX 1000005
#define MOD 1000000007
#define pb push_back
#define mp make_pair
#define pii pair<ll,ll>
#define vi vector<ll>
#define vp vector<pii >
#define vs vector<string>
#define all(v) v.begin(),v.end()
#define lb(v,x) lower_bound(all(v),x)
#define ub(v,x) upper_bound(all(v),x)
#define F first
#define S second
#define FOR(i,a,b) for(ll i=a;i<b;++i)
#define ROF(i,a,b) for(ll i=a;i>=b;i--)
#define sz(x) (ll)x.size()
typedef long long ll;

using namespace std;

ll gcd(ll a,ll b){return (a==0)?b:gcd(b%a,a);}

int main()
{
    IOS
    char c;
    int p=0,m=0,n;
    vector<char> v;
    while(cin>>c){
        if(c=='+')p++,v.pb(c);
        else if(c=='-')m++,v.pb(c);
        else if(c=='=')break;
        else continue;
    }
    cin>>n;
    if((p==0 && m>0) || (m==0 && p>0))cout<<"Impossible";
    else{
        if(p>n || m>n){
            if(p>n && m>n){cout<<"Impossible";return 0;}
            else{
                int x=gcd(p,m);
                p/=x,m/=x;
            }
        }
        if(p>n || m>n){cout<<"Impossible";return 0;}
        cout<<"Possible\n";
        cout<<n<<" ";
        FOR(i,0,sz(v)){
            cout<<v[i]<<" ";
            cout<<(v[i]=='-'?p:m)<<" ";
        }
        cout<<"= "<<n;
    }
    return 0;
}


#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define MAX 1000005
#define MOD 1000000007
#define pb push_back
#define mp make_pair
#define pii pair<ll,ll>
#define vi vector<ll>
#define vp vector<pii >
#define vs vector<string>
#define all(v) v.begin(),v.end()
#define lb(v,x) lower_bound(all(v),x)
#define ub(v,x) upper_bound(all(v),x)
#define F first
#define S second
#define FOR(i,a,b) for(ll i=a;i<b;++i)
#define ROF(i,a,b) for(ll i=a;i>=b;i--)
#define sz(x) (ll)x.size()
typedef long long ll;

using namespace std;

int main()
{
    IOS
    char c;
    int p=0,m=0,n;
    vector<char> v;
    while(cin>>c){
        if(c=='+')p++,v.pb(c);
        else if(c=='-')m++,v.pb(c);
        else if(c=='=')break;
        else continue;
    }
    cin>>n;
    if(p==0 && m>0)cout<<"Impossible";
    else{
        cout<<"Possible\n";
        cout<<n<<" ";
        FOR(i,0,sz(v)){
            cout<<v[i]<<" ";
            cout<<(v[i]=='-'?p:m)<<" ";
        }
        cout<<"= "<<n;
    }
    return 0;
}


#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define MAX 1000005
#define MOD 1000000007
#define pb push_back
#define mp make_pair
#define pii pair<ll,ll>
#define vi vector<ll>
#define vp vector<pii >
#define vs vector<string>
#define all(v) v.begin(),v.end()
#define lb(v,x) lower_bound(all(v),x)
#define ub(v,x) upper_bound(all(v),x)
#define F first
#define S second
#define FOR(i,a,b) for(ll i=a;i<b;++i)
#define ROF(i,a,b) for(ll i=a;i>=b;i--)
#define sz(x) (ll)x.size()
typedef long long ll;

using namespace std;

int main()
{
    IOS
    char c;
    int p=0,m=0,n;
    vector<char> v;
    while(cin>>c){
        if(c=='+')p++,v.pb(c);
        else if(c=='-')m++,v.pb(c);
        else if(c=='=')break;
        else continue;
    }
    cin>>n;
    if((p==0 && m>0) || (m==0 && p>0))cout<<"Impossible";
    else{
        if(p>n || m>n){
            if(p>n && m>n){cout<<"Impossible";return 0;}
            else if(p>n){
                while(p>n){
                    p/=2;
                    m*=2;
                }
            }
            else{
                while(m>n){
                    m/=2;
                    p*=2;
                }
            }
        }
        if(p>n || m>n){cout<<"Impossible";return 0;}
        cout<<"Possible\n";
        cout<<n<<" ";
        FOR(i,0,sz(v)){
            cout<<v[i]<<" ";
            cout<<(v[i]=='-'?p:m)<<" ";
        }
        cout<<"= "<<n;
    }
    return 0;
}


#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define MAX 1000005
#define MOD 1000000007
#define pb push_back
#define mp make_pair
#define pii pair<ll,ll>
#define vi vector<ll>
#define vp vector<pii >
#define vs vector<string>
#define all(v) v.begin(),v.end()
#define lb(v,x) lower_bound(all(v),x)
#define ub(v,x) upper_bound(all(v),x)
#define F first
#define S second
#define FOR(i,a,b) for(ll i=a;i<b;++i)
#define ROF(i,a,b) for(ll i=a;i>=b;i--)
#define sz(x) (ll)x.size()
typedef long long ll;

using namespace std;

int main()
{
    IOS
    char c;
    int p=0,m=0,n;
    vector<char> v;
    while(cin>>c){
        if(c=='+')p++,v.pb(c);
        else if(c=='-')m++,v.pb(c);
        else if(c=='=')break;
        else continue;
    }
    cin>>n;
    if((p==0 && m>0) || (m==0 && p>0))cout<<"Impossible";
    else{
        cout<<"Possible\n";
        cout<<n<<" ";
        FOR(i,0,sz(v)){
            cout<<v[i]<<" ";
            cout<<(v[i]=='-'?p:m)<<" ";
        }
        cout<<"= "<<n;
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mod 998244353
#define MEM(x,val) memset(x,val,sizeof(x))
#define ll long long
#define F first
#define S second
#define pii pair<int,int>
#define ALL(x) x.begin(),x.end()
#define FAST ios_base::sync_with_stdio(false);cin.tie(0);
int II(){int q;scanf("%d",&q);return q;}
ll LII(){ll q;scanf("%lld",&q);return q;}

#define int ll

int search(int baki,int sum,int mot,int N){
	int l = 1,r = N;
	int re = 1;
	while(l<=r){
		int mid = (l + r)/2;
		if((sum + mid + baki)<=mot){
			re = mid;
			l = mid + 1;
		}else r = mid - 1;
	}
	return re;
}

void solve(){
	int pos = 0,neg = 0;
	vector<char>v;
	int N;
	v.pb('+');
	while(1){
		char c1,c2; cin>>c1>>c2;
		if(c2 == '='){
			cin>>N;
			break;
		}
		v.pb(c2);
	}
	for(auto it:v){
		if(it == '+') pos++;
		else neg++;
	}
	if((((pos*N)-neg) < N) or (pos - neg) > N){
		cout<<"Impossible"<<endl;
		return;
	}
	int mot = N + neg;
	vector<int>v1;
	int sum = 0;
	//cout<<search(3,0,43,N)<<endl;
	for(int i = 1; i<=pos; i++){
		int q = search(pos - i,sum,mot,N);
		sum += q;
		v1.pb(q);
		//cout<<q<<endl;
	}
	vector<int>v2;
	for(int i = 0; i<v.size(); i++){
		if(v[i] == '+'){
			if(i == 0){
				cout<<v1.back()<<" ";
			}else{
				cout<<"+ "<<v1.back()<<" ";
			}
			v1.pop_back();
		}else{
			cout<<"- "<<1<<" ";
		}
	}
	cout<<"= "<<N<<endl;
}

int32_t main(){
  #ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  #endif
  int tt; tt = 1;
  while(tt--){
    //printf("Case %d: ",cas++);
    solve();
  }
}


#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mod 998244353
#define MEM(x,val) memset(x,val,sizeof(x))
#define ll long long
#define F first
#define S second
#define pii pair<int,int>
#define ALL(x) x.begin(),x.end()
#define FAST ios_base::sync_with_stdio(false);cin.tie(0);
int II(){int q;scanf("%d",&q);return q;}
ll LII(){ll q;scanf("%lld",&q);return q;}

#define int ll

int search(int baki,int sum,int mot,int N){
	int l = 1,r = N;
	int re = 1;
	while(l<=r){
		int mid = (l + r)/2;
		if((sum + mid + baki)<=mot){
			re = mid;
			l = mid + 1;
		}else r = mid - 1;
	}
	return re;
}

void solve(){
	int pos = 0,neg = 0;
	vector<char>v;
	int N;
	v.pb('+');
	while(1){
		char c1,c2; cin>>c1>>c2;
		if(c2 == '='){
			cin>>N;
			break;
		}
		v.pb(c2);
	}
	for(auto it:v){
		if(it == '+') pos++;
		else neg++;
	}
	if((((pos*N)-neg) < N) or (pos - neg) > N){
		cout<<"Impossible"<<endl;
		return;
	}
	int mot = N + neg;
	vector<int>v1;
	int sum = 0;
	//cout<<search(3,0,43,N)<<endl;
	for(int i = 1; i<=pos; i++){
		int q = search(pos - i,sum,mot,N);
		sum += q;
		v1.pb(q);
		//cout<<q<<endl;
	}
	cout<<"Possible"<<endl;
	for(int i = 0; i<v.size(); i++){
		if(v[i] == '+'){
			if(i == 0){
				cout<<v1.back()<<" ";
			}else{
				cout<<"+ "<<v1.back()<<" ";
			}
			v1.pop_back();
		}else{
			cout<<"- "<<1<<" ";
		}
	}
	cout<<"= "<<N<<endl;
}

int32_t main(){
  #ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  #endif
  int tt; tt = 1;
  while(tt--){
    //printf("Case %d: ",cas++);
    solve();
  }
}


#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mod 998244353
#define MEM(x,val) memset(x,val,sizeof(x))
#define ll long long
#define F first
#define S second
#define pii pair<int,int>
#define ALL(x) x.begin(),x.end()
#define FAST ios_base::sync_with_stdio(false);cin.tie(0);
int II(){int q;scanf("%d",&q);return q;}
ll LII(){ll q;scanf("%lld",&q);return q;}

#define int ll

int search(int baki,int sum,int mot,int N){
	int l = 1,r = N;
	int re = 1;
	while(l<=r){
		int mid = (l + r)/2;
		if((sum + mid + baki)<=mot){
			re = mid;
			l = mid + 1;
		}else r = mid - 1;
	}
	return re;
}

int search_neg(int baki,int neg_sum,int pos_sum,int N){
	int l = 1,r = N,re = 1;
	while(l<=r){
		int mid = (l + r)/2;
		//cout<<pos_sum<<" "<<mid<<" "<<neg_sum<<" "<<N<<endl;
		if((neg_sum + mid + baki) <= (pos_sum-N)){
			re = mid;
			l = mid + 1;
		}else r = mid - 1;
	}
	return re;
}

void solve(){
	int pos = 0,neg = 0;
	vector<char>v;
	int N;
	v.pb('+');
	while(1){
		char c1,c2; cin>>c1>>c2;
		if(c2 == '='){
			cin>>N;
			break;
		}
		v.pb(c2);
	}
	for(auto it:v){
		if(it == '+') pos++;
		else neg++;
	}
	//cout<<pos<<" "<<neg<<endl;
	if((((pos*N)-neg) < N) or (pos - (N*neg)) > N){
		cout<<"Impossible"<<endl;
		return;
	}
	int mot = N + neg;
	vector<int>v1;
	int sum = 0;
	//cout<<search(3,0,43,N)<<endl;
	for(int i = 1; i<=pos; i++){
		int q = search(pos - i,sum,mot,N);
		sum += q;
		v1.pb(q);
		//cout<<q<<endl;
	}
	int neg_sum = 0;
	vector<int>v2;
	for(int i = 1; i<=neg; i++){
		int q = search_neg(neg - i,neg_sum,sum,N);
		neg_sum += q;
		v2.pb(q);
	}
	if((sum - neg_sum) != N){
		cout<<"Impossible"<<endl;
		return;
	}
	int w1 = 0,w2 = 0;
	cout<<"Possible"<<endl;
	for(int i = 0; i<v.size(); i++){
		if(v[i] == '+'){
			if(i == 0){
				cout<<v1.back()<<" ";
			}else{
				cout<<"+ "<<v1.back()<<" ";
			}
			w1 += v1.back();
			v1.pop_back();
		}else{
			cout<<"- "<<v2.back()<<" ";
			w2 += v2.back();
			v2.pop_back();
		}
	}
	cout<<"= "<<N<<endl;
	//cout<<w1<<" "<<w2<<" "<<w1 - w2<<endl;
	//cout<<sum<<" "<<neg_sum<<" "<<sum - neg_sum<<endl;
}

int32_t main(){
  #ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  #endif
  int tt; tt = 1;
  while(tt--){
    //printf("Case %d: ",cas++);
    solve();
  }
}


#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mod 998244353
#define MEM(x,val) memset(x,val,sizeof(x))
#define ll long long
#define F first
#define S second
#define pii pair<int,int>
#define ALL(x) x.begin(),x.end()
#define FAST ios_base::sync_with_stdio(false);cin.tie(0);
int II(){int q;scanf("%d",&q);return q;}
ll LII(){ll q;scanf("%lld",&q);return q;}

#define int ll

int search(int baki,int sum,int mot,int N){
	int l = 1,r = N;
	int re = 1;
	while(l<=r){
		int mid = (l + r)/2;
		if((sum + mid + baki)<=mot){
			re = mid;
			l = mid + 1;
		}else r = mid - 1;
	}
	return re;
}

int search_neg(int baki,int neg_sum,int pos_sum,int N){
	int l = 1,r = N,re = 1;
	while(l<=r){
		int mid = (l + r)/2;
		//cout<<pos_sum<<" "<<mid<<" "<<neg_sum<<" "<<N<<endl;
		if((neg_sum + mid + baki) <= (pos_sum-N)){
			re = mid;
			l = mid + 1;
		}else r = mid - 1;
	}
	return re;
}

void solve(){
	int pos = 0,neg = 0;
	vector<char>v;
	int N;
	v.pb('+');
	while(1){
		char c1,c2; cin>>c1>>c2;
		if(c2 == '='){
			cin>>N;
			break;
		}
		v.pb(c2);
	}
	for(auto it:v){
		if(it == '+') pos++;
		else neg++;
	}
	//cout<<pos<<" "<<neg<<endl;
	if((((pos*N)-neg) < N) or (pos - (N*neg)) > N){
		cout<<"Impossible"<<endl;
		return;
	}
	int mot = N + neg;
	vector<int>v1;
	int sum = 0;
	//cout<<search(3,0,43,N)<<endl;
	for(int i = 1; i<=pos; i++){
		int q = search(pos - i,sum,mot,N);
		sum += q;
		v1.pb(q);
		//cout<<q<<endl;
	}
	int neg_sum = 0;
	vector<int>v2;
	for(int i = 1; i<=neg; i++){
		int q = search_neg(neg - i,neg_sum,sum,N);
		neg_sum += q;
		v2.pb(q);
	}
	if((sum - neg_sum) != N){
		cout<<"Impossible"<<endl;
		return;
	}
	cout<<"Possible"<<endl;
	for(int i = 0; i<v.size(); i++){
		if(v[i] == '+'){
			if(i == 0){
				cout<<v1.back()<<" ";
			}else{
				cout<<"+ "<<v1.back()<<" ";
			}
			v1.pop_back();
		}else{
			cout<<"- "<<v2.back()<<" ";
			v2.back();
		}
	}
	cout<<"= "<<N<<endl;
	//cout<<sum<<" "<<neg_sum<<" "<<sum - neg_sum<<endl;
}

int32_t main(){
  #ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  #endif
  int tt; tt = 1;
  while(tt--){
    //printf("Case %d: ",cas++);
    solve();
  }
}


#include <bits/stdc++.h>

#define FOR(i,a,b) for( LL i = (a); i < (LL)(b); i++ )
#define REP(i,n) FOR(i,0,n)
#define FORE(x,arr) for(auto& x:arr)
#define ALL(x) (x).begin(),(x).end()
#define SORT(x) sort(ALL((x)))
#define REVERSE(x) reverse(ALL((x)))
#define UNIQUE(x) (x).erase( unique( ALL( (x) ) ) , (x).end() )
#define PW(x) (1LL<<(x))
#define SZ(x) ((LL)(x).size())
#define SHOW(x) cout << #x << " = " << x << endl
#define SHOWA(x) for( int ___i = 0; ___i < SZ(x); ___i++ ){ cout << x[___i] << " "; } cout << endl
#define GET(x, i) get<i>(x)

#define PB emplace_back
#define MP make_pair
#define MT make_tuple

using namespace std;

typedef long double LD;
typedef long long int LL;
typedef pair<int,int> PI;
typedef pair<LL,LL> PL;
typedef vector<int> VI;
typedef vector<LL> VL;
typedef vector<LD> VD;
typedef vector<PI> VPI;
typedef vector<PL> VPL;
typedef vector<VPL> GR;
typedef vector<VL> ML;
typedef vector<VD> MD;
typedef vector<VI> MI;

template<class T> T& chmin(T &a , const T &b) { return a = min(a,b); }
template<class T> T& chmax(T &a , const T &b) { return a = max(a,b); }
template<class T> T sq(T a) { return a * a; }

void init_input() {
  //ios::sync_with_stdio(false);
  //cin.tie(nullptr);
  //cout.precision(10);
  //cout << fixed;
#ifdef LOCAL_DEFINE
  freopen("input", "rt", stdin);
#endif
}

void print_time() {
#ifdef LOCAL_DEFINE
  cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
}

void solve() {
  string s;
  getline(cin, s);
  int p = count(ALL(s), '+') + 1;
  int m = count(ALL(s), '-');
  size_t pos = s.find_last_of('=');
  int n = atoi(s.substr(pos+1).c_str());
  if (n >= p - m*n &&
      n <= p*n - m) {
    cout << "Possible\n";
    // x - y = n
    int x = max(p, m+n);
    int y = x - n;
    int pos = x/p;
    int neg = m == 0 ? 0 : y/m;
    int pos_big = 0;
    int neg_big = 0;
    bool ispos = true;
    FORE(c, s) {
      if (c == '?') {
        if (ispos) {
          if (pos_big < x % p) {
            cout << pos + 1;
            pos_big++;
          } else {
            cout << pos;
          }
        } else {
          if (neg_big < y % m) {
            cout << neg + 1;
            neg_big++;
          } else {
            cout << neg;
          }
        }
      } else {
        if (c == '-') ispos = false;
        if (c == '+') ispos = true;
        cout << c;
      }
    }
    cout << endl;
  } else {
    cout << "Impossible\n";
  }
}

int main() {
  init_input();
  solve();
  print_time();
  return 0;
}


#include <bits/stdc++.h>

#define FOR(i,a,b) for( LL i = (a); i < (LL)(b); i++ )
#define REP(i,n) FOR(i,0,n)
#define FORE(x,arr) for(auto& x:arr)
#define ALL(x) (x).begin(),(x).end()
#define SORT(x) sort(ALL((x)))
#define REVERSE(x) reverse(ALL((x)))
#define UNIQUE(x) (x).erase( unique( ALL( (x) ) ) , (x).end() )
#define PW(x) (1LL<<(x))
#define SZ(x) ((LL)(x).size())
#define SHOW(x) cout << #x << " = " << x << endl
#define SHOWA(x) for( int ___i = 0; ___i < SZ(x); ___i++ ){ cout << x[___i] << " "; } cout << endl
#define GET(x, i) get<i>(x)

#define PB emplace_back
#define MP make_pair
#define MT make_tuple

using namespace std;

typedef long double LD;
typedef long long int LL;
typedef pair<int,int> PI;
typedef pair<LL,LL> PL;
typedef vector<int> VI;
typedef vector<LL> VL;
typedef vector<LD> VD;
typedef vector<PI> VPI;
typedef vector<PL> VPL;
typedef vector<VPL> GR;
typedef vector<VL> ML;
typedef vector<VD> MD;
typedef vector<VI> MI;

template<class T> T& chmin(T &a , const T &b) { return a = min(a,b); }
template<class T> T& chmax(T &a , const T &b) { return a = max(a,b); }
template<class T> T sq(T a) { return a * a; }

void init_input() {
  //ios::sync_with_stdio(false);
  //cin.tie(nullptr);
  //cout.precision(10);
  //cout << fixed;
#ifdef LOCAL_DEFINE
  freopen("input", "rt", stdin);
#endif
}

void print_time() {
#ifdef LOCAL_DEFINE
  cerr << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
#endif
}

void solve() {
  string s;
  getline(cin, s);
  int p = count(ALL(s), '+') + 1;
  int m = count(ALL(s), '-');
  size_t pos = s.find_last_of('=');
  int n = atoi(s.substr(pos+1).c_str());
  if (n >= p - m*n &&
      n <= p*n - m) {
    cout << "Possible\n";
    // x - y = n
    int x = max(p, m+n);
    int y = x - n;
    int pos = x/p;
    int neg = y/m;
    int pos_big = 0;
    int neg_big = 0;
    bool ispos = true;
    FORE(c, s) {
      if (c == '?') {
        if (ispos) {
          if (pos_big < x % p) {
            cout << pos + 1;
            pos_big++;
          } else {
            cout << pos;
          }
        } else {
          if (neg_big < y % m) {
            cout << neg + 1;
            neg_big++;
          } else {
            cout << neg;
          }
        }
      } else {
        if (c == '-') ispos = false;
        if (c == '+') ispos = true;
        cout << c;
      }
    }
    cout << endl;
  } else {
    cout << "Impossible\n";
  }
}

int main() {
  init_input();
  solve();
  print_time();
  return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ll long long int
#define int ll
#define vec vector < int >
#define vecp vector < pair < int , int > >
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define debug(x)   cerr<<#x<<": "<<x<<endl
#define inf 1e+18
#define pii pair < int , int >
#define mod 998244353
#define pi 3.14159265358979323846

signed main(){
  fast;
  //freopen("input.txt" , "r" , stdin);
  char c;
  int p = 0 , m = 0 , n;
  string s;
  vec v , d;
  while(1){
  	cin>>c;
  	if(c == '+')
  	p++ ,  s+="+";
  	else if(c=='-')
  	m++  , s+="-";
  	else if(c == '='){
  	 break;
	  }
  }
  cin>>n;
  p++;
  int maxval = p*n - m;
  int minval = p - m;
  if(n > maxval || n < minval){
  	cout<<"Impossible\n";
  	return 0;
  }
  for(int i = 1 ; i<=m ; i++) d.pb(1);
  while(m > 0){
  	m -= n;
  	if(m >= 0)
  	v.pb(n) , p--;
  	else
  	v.pb(m+n) , p--;
  }

  for(int i = 1 ; i<p ; i++){
  	v.pb(1);
  }
  v.pb(n - p+1);
//  for(int i = 0 ; i < v.size() ; i++)
//  cout<<v[i]<<" ";
//  cout<<endl;
//   for(int i = 0 ; i < d.size() ; i++)
//  cout<<d[i]<<" ";
//  cout<<endl;
  cout<<"Possible\n";
  int j = v.size()-1 ,k = d.size()-1;
  cout<<v[j]<<" ";
  j--;
  for(int i = 0 ; i < s.length() ; i++){
  	if(s[i] == '+'){
  		cout<<"+ ";
  		cout<<v[j--]<<" ";
	  }
	  if(s[i]=='-'){
  		cout<<"- ";
  		cout<<d[k--]<<" ";
	  }
  }
  cout<<"= "<<n<<endl;

}


#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define ll long long int
#define int ll
#define vec vector < int >
#define vecp vector < pair < int , int > >
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define debug(x)   cerr<<#x<<": "<<x<<endl
#define inf 1e+18
#define pii pair < int , int >
#define mod 998244353
#define pi 3.14159265358979323846

signed main(){
  fast;
  //freopen("input.txt" , "r" , stdin);
  char c;
  int p = 0 , m = 0 , n;
  string s;
  vec v , ans;
  ans.pb(1) ; v.pb(1);
  while(1){
  	cin>>c;
  	if(c == '+')
  	p++ ,  s+="+" , ans.pb(1) , v.pb(1);
  	else if(c=='-')
  	m++  , s+="-" , ans.pb(1) , v.pb(-1);
  	else if(c == '='){
  	 break;
	  }
  }
  cin>>n;
  p++;
  int maxval = p*n - m;
  int minval = p - m*n;
  if(n > maxval || n < minval){
  	cout<<"Impossible\n";
  	return 0;
  }
  int diff =(p - m) - n;
  ///cout<<diff<<endl;
  if(diff >= 0){
       while(1){
       		for(int i = 0 ; i < ans.size() ; i++){
  	     if(diff > 0 && v[i] == -1) ans[i]++ , diff--;

  	     if(diff == 0){
  	     	cout<<"Possible\n";
  	     	cout<<ans[0];
  	     	for(int j = 1 ; j<ans.size() ; j++){
  	     		if(v[j] == 1)
  	     		cout<<" + "<<ans[j];
  	     		else if(v[j] == -1)
  	     		cout<<" - "<<ans[j];
			   }
			   cout<<" = "<<n<<endl;
			   return 0;
		   }
    }
	   }
  }
  if(diff < 0){
  	 while(1){
  	 	for(int i = 0 ; i < ans.size() ; i++){
  	     if(diff < 0 && v[i] == 1) ans[i]++ , diff++;

  	     if(diff == 0){
  	     	cout<<"Possible\n";
  	     	cout<<ans[0];
  	     	for(int j = 1 ; j<ans.size() ; j++){
  	     		if(v[j] == 1)
  	     		cout<<" + "<<ans[j];
  	     		else if(v[j] == -1)
  	     		cout<<" - "<<ans[j];
			   }
			   cout<<" = "<<n<<endl;
			   return 0;
		   }
    }
	   }
  }

}


using namespace std;
#include <bits/stdc++.h>
typedef  long long                     LL;
typedef  vector < int >                VI;
typedef  pair< int, int >              II;
typedef  vector < II >                 VII;
#define SI(x)                          scanf ("%d", &x)
#define SLL(x)                         scanf ("%lld", &x)
#define PI(x)                          printf ("%d\n", x)
#define PLL(x)                         printf ("%lld\n", x)
#define MOD                            98765431
#define PB                             push_back
#define MP                             make_pair
#define ALL(v)                         v.begin(), v.end()
#define FILL(a,b)                      memset(a,b,sizeof(a))
#define FLI(i,j,n)                     for(int i=j;i<n;i++)
#define FLD(i,j,n)                     for(int i=n-1;i>=j;i--)
#define F                              first
#define S                              second
#define fast_io                        ios_base::sync_with_stdio(false);cin.tie(NULL)

/* Fast Input of integer */
/*inline void fastRead_int(int &x) {register int c = getchar_unlocked();x = 0;
    int neg = 0;for(; ((c<48 || c>57) && c != '-'); c = getchar_unlocked());
    if(c=='-') {neg = 1;c = getchar_unlocked();}for(; c>47 && c<58 ; c = getchar_unlocked()) {
    	x = (x<<1) + (x<<3) + c - 48;}if(neg) x = -x;
}*/

int main ()
{
	int pc = 1, nc = 0, n, b = 0, m, a1, b1, N;
	char c, X [200], d;

	while (true)
	{
		scanf (" %c", &c);
		scanf (" %c", &c);
		if (c == '+') pc++;
		else if (c == '-') nc++;
		else break;
		X [b++] = c;

	}
    SI (N);
    n = N;
	int mIn = pc - nc * n;
	int mAx = n*pc - nc;
	if (!(n >= mIn && n <= mAx)) {
		printf ("Impossible\n");
	} else {
		printf ("Possible\n");
		for (int i = 1; i <= N; i++){
			m = n - i;
			mIn = pc - 1 - nc * N;
			mAx = N * (pc-1) - nc;
			if (m >= mIn && m <= mAx) {
				printf ("%d ", i);
				n = n - i;
				pc--;
				break;
			}
		}
		for (int i = 0; i < b; i++){
			printf ("%c ", X [i]);
			if (X [i] == '+') pc--;
			else nc--;

			for (int j = 1; j <= N; j++) {
				if (X [i] == '+') m = n - j;
				else m = n + j;
				mIn = pc - nc * N;
			    mAx = N * (pc) - nc;
			    if (m >= mIn && m <= mAx) {
			    	printf ("%d ", j);
			    	n = m;
			    	break;
			    }

			}

		}
		printf ("= %d\n", N);

	}
	return 0;

}


using namespace std;
#include <bits/stdc++.h>
typedef  long long                     LL;
typedef  vector < int >                VI;
typedef  pair< int, int >              II;
typedef  vector < II >                 VII;
#define SI(x)                          scanf ("%d", &x)
#define SLL(x)                         scanf ("%lld", &x)
#define PI(x)                          printf ("%d\n", x)
#define PLL(x)                         printf ("%lld\n", x)
#define MOD                            98765431
#define PB                             push_back
#define MP                             make_pair
#define ALL(v)                         v.begin(), v.end()
#define FILL(a,b)                      memset(a,b,sizeof(a))
#define FLI(i,j,n)                     for(int i=j;i<n;i++)
#define FLD(i,j,n)                     for(int i=n-1;i>=j;i--)
#define F                              first
#define S                              second
#define fast_io                        ios_base::sync_with_stdio(false);cin.tie(NULL)

/* Fast Input of integer */
inline void fastRead_int(int &x) {register int c = getchar_unlocked();x = 0;
    int neg = 0;for(; ((c<48 || c>57) && c != '-'); c = getchar_unlocked());
    if(c=='-') {neg = 1;c = getchar_unlocked();}for(; c>47 && c<58 ; c = getchar_unlocked()) {
    	x = (x<<1) + (x<<3) + c - 48;}if(neg) x = -x;
}

int main ()
{
	int pc = 1, nc = 0, n, b = 0, m, a1, b1, N;
	char c, X [200], d;

	while (true)
	{
		scanf (" %c", &c);
		scanf (" %c", &c);
		if (c == '+') pc++;
		else if (c == '-') nc++;
		else break;
		X [b++] = c;

	}
    SI (N);
    n = N;
	int mIn = pc - nc * n;
	int mAx = n*pc - nc;
	if (!(n >= mIn && n <= mAx)) {
		printf ("Impossible\n");
	} else {
		printf ("Possible\n");
		for (int i = 1; i <= n; i++){
			m = n - i;
			mIn = pc - 1 - nc * m;
			mAx = m * (pc-1) - nc;
			if (m >= mIn && m <= mAx) {
				printf ("%d ", i);
				n = n - i;
				pc--;
				break;
			}
		}
		for (int i = 0; i < b; i++){
			printf ("%c ", X [i]);
			if (X [i] == '+') pc--;
			else nc--;

			for (int j = 1; j <= N; j++) {
				if (X [i] == '+') m = n - j;
				else m = n + j;
				mIn = pc - nc * N;
			    mAx = N * (pc) - nc;
			    if (m >= mIn && m <= mAx) {
			    	printf ("%d ", j);
			    	n = m;
			    	break;
			    }

			}

		}
		printf ("= %d\n", N);

	}
	return 0;

}


using namespace std;
#include <bits/stdc++.h>
typedef  long long                     LL;
typedef  vector < int >                VI;
typedef  pair< int, int >              II;
typedef  vector < II >                 VII;
#define SI(x)                          scanf ("%d", &x)
#define SLL(x)                         scanf ("%lld", &x)
#define PI(x)                          printf ("%d\n", x)
#define PLL(x)                         printf ("%lld\n", x)
#define MOD                            98765431
#define PB                             push_back
#define MP                             make_pair
#define ALL(v)                         v.begin(), v.end()
#define FILL(a,b)                      memset(a,b,sizeof(a))
#define FLI(i,j,n)                     for(int i=j;i<n;i++)
#define FLD(i,j,n)                     for(int i=n-1;i>=j;i--)
#define F                              first
#define S                              second
#define fast_io                        ios_base::sync_with_stdio(false);cin.tie(NULL)

/* Fast Input of integer */
/*inline void fastRead_int(int &x) {register int c = getchar_unlocked();x = 0;
    int neg = 0;for(; ((c<48 || c>57) && c != '-'); c = getchar_unlocked());
    if(c=='-') {neg = 1;c = getchar_unlocked();}for(; c>47 && c<58 ; c = getchar_unlocked()) {
    	x = (x<<1) + (x<<3) + c - 48;}if(neg) x = -x;
}*/

int main ()
{
	int pc = 1, nc = 0, n, b = 0, m, a1, b1, N;
	char c, X [200], d;

	while (true)
	{
		scanf (" %c", &c);
		scanf (" %c", &c);
		if (c == '+') pc++;
		else if (c == '-') nc++;
		else break;
		X [b++] = c;

	}
    SI (N);
    n = N;
	int mIn = pc - nc * n;
	int mAx = n*pc - nc;
	if (!(n >= mIn && n <= mAx)) {
		printf ("Impossible\n");
	} else {
		printf ("Possible\n");
		for (int i = 1; i <= n; i++){
			m = n - i;
			mIn = pc - 1 - nc * m;
			mAx = m * (pc-1) - nc;
			if (m >= mIn && m <= mAx) {
				printf ("%d ", i);
				n = n - i;
				pc--;
				break;
			}
		}
		for (int i = 0; i < b; i++){
			printf ("%c ", X [i]);
			if (X [i] == '+') pc--;
			else nc--;

			for (int j = 1; j <= N; j++) {
				if (X [i] == '+') m = n - j;
				else m = n + j;
				mIn = pc - nc * N;
			    mAx = N * (pc) - nc;
			    if (m >= mIn && m <= mAx) {
			    	printf ("%d ", j);
			    	n = m;
			    	break;
			    }

			}

		}
		printf ("= %d\n", N);

	}
	return 0;

}


#include <cstdio>
#include <bitset>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define fd(i,a,b) for(int i=(a);i>=(b);i--)
#define cle(a,v) memset(a,(v),sizeof(a))
const int maxn = 1e3 + 7;
char s[maxn];
int n;
int x = 1, y = 0;
void compound(queue<int> &q, int t, int sz) {
	int i;
	for(i = 0; i < sz; i++) {
		if(t > sz - i) {
			if(t >= sz - i - 1 + n) {
				t -= n;
				q.push(n);
			}
			else {
				int d = t - (sz - i - 1);
				t -= d;
				q.push(d);
			}
		}
		if(t == sz - i) {
			break;
		}
	}
	for(; i < sz; i++) {
		q.push(1);
	}
}
int main() {
	//("E:1.in", "r", stdin);
	gets(s);
	int len = strlen(s);
	int wei;
	for(int i = len - 1; i >= 0; i--) {
		if(s[i] == ' ') {
			wei = i;
			break;
		}
	}
	n = 0;
	for(int i = wei + 1; i < len; i++) {
		n = n * 10 + s[i] - '0';
	}
	// printf("%d\n", n);
	for(int i = 0; i < wei; i++) {
		if(s[i] == '+') x++;
		if(s[i] == '-') y++;
	}
	if(x - y * n <= n && n <= x * n - y) {
		printf("Possible\n");
		int ans = max(x, y + n);
		queue<int> add, sub;
		compound(add, ans, x);
		compound(sub, ans - n, y);
		printf("%d", add.front());
		add.pop();
		for(int i = 0; i < wei; i++) {
			if(s[i] == '+') {
				printf(" + %d", add.front());
				add.pop();
			}
			if(s[i] == '-') {
				printf(" - %d", sub.front());
				sub.pop();
			}
		}
		printf(" = %d\n", n);
	}
	else {
		printf("Impossible\n");
	}
	return 0;
}


#include <cstdio>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
using ll=long long;
const int maxn= 2e3 +9;
char s[maxn];
int pl,su,len;
int n;
vector<int> pp,ss;
void pri()
{
	int i=0,j=0;
	printf("%d ",pp[i++]);
	for(int k=0;k<len;k++){
		if(s[k]=='+')
			printf("+ %d ",pp[i++]);
		if(s[k]=='-')
			printf("- %d ",ss[j++]);
	}
	printf("= %d\n",n);
}
int main()
{
//	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	//("E:1.txt","r",stdin);
	while(gets(s)!=nullptr){
		len=strlen(s);
		n=0;
		int pl=1,su=0;
		for(int i=0;i<len;i++){
			if(s[i]=='+') pl++;
			if(s[i]=='-') su++;
			if(isdigit(s[i])){
				n+=s[i]-'0';
				n*=10;
			}
		}
		n/=10;
//		cerr<<n<<endl;
		ll mi=pl-su*n,ma=n*pl-su;
		if(mi<=n&&n<=ma){
			puts("Possible");
			pp.clear(),ss.clear();
			if(su<pl){
				for(int j=0;j<su;j++)
					ss.push_back(n);
				for(int j=0;j<pl-1;j++)
					pp.push_back(n*(su+1)/pl);
				pp.push_back(n*(su+1)-(pl-1)*(n*(su+1)/pl));
			}
			else{
				for(int j=0;j<pl;j++)
					pp.push_back(n);
				for(int j=0;j<su-1;j++)
					ss.push_back(n*(pl-1)/su);
				ss.push_back(n*(pl-1)-(su-1)*(n*(pl-1)/su));
			}
//			for(int j=0;j<pp.size();j++)
//				printf("%d** ",pp[j]);
//			puts("");
//			for(int j=0;j<ss.size();j++)
//				printf("%d* ",ss[j]);
//			puts("");
			pri();
		}
		else
			puts("Impossible");
	}
	return 0;
}


#include <cstdio>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
using ll=long long;
const int maxn= 2e3 +9;
char s[maxn];
int pl,su,len;
int n;
vector<int> pp,ss;
void pri()
{
	int i=0,j=0;
	printf("%d ",pp[i++]);
	for(int k=0;k<len;k++){
		if(s[k]=='+')
			printf("+ %d ",pp[i++]);
		if(s[k]=='-')
			printf("- %d ",ss[j++]);
	}
	printf("= %d\n",n);
}
int main()
{
//	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	//("E:1.txt","r",stdin);
	while(gets(s)!=nullptr){
		len=strlen(s);
		n=0;
		int pl=1,su=0;
		for(int i=0;i<len;i++){
			if(s[i]=='+') pl++;
			if(s[i]=='-') su++;
			if(isdigit(s[i])){
				n+=s[i]-'0';
				n*=10;
			}
		}
		n/=10;
//		cerr<<n<<endl;
		ll mi=pl-su*n,ma=n*pl-su;
		if(mi<=n&&n<=ma){
			puts("Possible");
			pp.clear(),ss.clear();
			if(su<pl){
				for(int j=0;j<su;j++)
					ss.push_back(n);
				ll sum=su*n-pl;
				sum+=n;
				for(int j=0;j<pl;j++)
					pp.push_back(1);
//				sum-=pl;
				int cnt=0;
				while(sum!=0){
					if(sum>=n-1){
						pp[cnt++]+=n-1;
						sum-=n-1;
					}
					else{
						pp[cnt++]+=sum;
						sum=0;
					}
				}
			}
			else{
				for(int j=0;j<pl;j++)
					pp.push_back(n);
				ll sum=n*pl-su-n;
				for(int j=0;j<su;j++)
					ss.push_back(1);
//				sum-=
				int cnt=0;
				while(sum!=0){
					if(sum>=n-1){
						ss[cnt++]+=n-1;
						sum-=n-1;
					}
					else{
						ss[cnt++]+=sum;
						sum=0;
					}
				}
			}
//			for(int j=0;j<pp.size();j++)
//				printf("%d** ",pp[j]);
//			puts("");
//			for(int j=0;j<ss.size();j++)
//				printf("%d* ",ss[j]);
//			puts("");
			pri();
		}
		else
			puts("Impossible");
	}
	return 0;
}


#include <cstdio>
#include <iostream>
#include <set>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
#define INF 0x3f3f3f3f
using ll=long long;
const int maxn= 2e3 +9;
char s[maxn];
int pl,su,len;
int n;
vector<int> pp,ss;
void pri()
{
	int i=0,j=0;
	printf("%d ",pp[i++]);
	for(int k=0;k<len;k++){
		if(s[k]=='+')
			printf("+ %d ",pp[i++]);
		if(s[k]=='-')
			printf("- %d ",ss[j++]);
	}
	printf("= %d\n",n);
}
int main()
{
//	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	//("E:1.txt","r",stdin);
	while(gets(s)!=nullptr){
		len=strlen(s);
		n=0;
		int pl=1,su=0;
		for(int i=0;i<len;i++){
			if(s[i]=='+') pl++;
			if(s[i]=='-') su++;
			if(isdigit(s[i])){
				n+=s[i]-'0';
				n*=10;
			}
		}
		n/=10;
//		cerr<<n<<endl;
		ll mi=pl-su*n,ma=n*pl-su;
		if(mi<=n&&n<=ma){
			puts("Possible");
			pp.clear(),ss.clear();
			if(su<pl){
				for(int j=0;j<su;j++)
					ss.push_back(n);
				for(int j=0;j<pl-1;j++)
					pp.push_back(ceil(n*(su+1)/pl));
				pp.push_back(n*(su+1)-(pl-1)*(ceil(n*(su+1)/pl)));
			}
			else{
				for(int j=0;j<pl;j++)
					pp.push_back(n);
				for(int j=0;j<su-1;j++)
					ss.push_back(ceil(n*(pl-1)/su));
				ss.push_back(n*(pl-1)-(su-1)*(ceil(n*(pl-1)/su)));
			}
//			for(int j=0;j<pp.size();j++)
//				printf("%d** ",pp[j]);
//			puts("");
//			for(int j=0;j<ss.size();j++)
//				printf("%d* ",ss[j]);
//			puts("");
			pri();
		}
		else
			puts("Impossible");
	}
	return 0;
}


#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = (int) 1e6 + 7;
const ll M = (ll) 1e6 + 3;

int get(string& s) {
	int res = 0;
	for (auto x : s) {
		res = res * 10 + int(x - '0');
	}
	return res;
}

bool can(int sum, int range, int num) {
	if (sum < num) {
		return false;
	}
	if (num == 0) {
		if (sum == 0)
			return true;
		else
			return false;
	}
	int av = sum / num, cnt = sum % num;
	if (av + min(cnt, 1) > range)
		return false;
	return true;
}

int main() {
	//ios_base::sync_with_stdio(0);
	freopen("a", "r", stdin);
	string s;
	vector<string> a;
	a.push_back("+");
	while(cin >> s) {
		a.push_back(s);
	}
	int aim = get(a.back()), ps = 0, ng = 0;
	for (auto x : a) {
		if (x == "+")
			++ps;
		else if (x == "-")
			++ng;
	}
	for (int i = aim; i < N; i++) {
		int sum_left = i, sum_right = i - aim;
		bool ff = can(sum_left, aim, ps);
		bool ss = can(sum_right, aim, ng);
		if (!ff || !ss) continue;
		int fa = 0, ak = 0;
		int fb = 0, bk = 0;
		int sa = 0, ck = 0;
		int sb = 0, dk = 0;
		fa = sum_left / ps; ak = ps - (sum_left % ps);
		fb = sum_left / ps + min(sum_left % ps, 1), bk = sum_left % ps;
		if (ng != 0) {
			sa = sum_right / ng; ck = ng - (sum_right % ng);
			sb = sum_right / ng + min(sum_right % ng, 1), dk = sum_right % ng;
		}
		vector<int> pos, neg;
		for (int i = 0; i < ak; i++)
			pos.push_back(fa);
		for (int i = 0; i < bk; i++)
			pos.push_back(fb);
		for (int i = 0; i < ck; i++)
			neg.push_back(sa);
		for (int i = 0; i < dk; i++)
			neg.push_back(sb);
		cout << "Possible\n";
		for (int i = 0; i < (int)a.size(); i++) {
			if (a[i] == "+") {
				if (i != 0) cout << "+ ";
				cout << pos.back() << ' ';
				pos.pop_back();
			} else if (a[i] == "-") {
				cout << "- ";
				cout << neg.back() << ' ';
				neg.pop_back();
			}
		}
		cout << "= " << aim;
		return 0;
	}
	cout << "Impossible";
	return 0;
}


#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = (int) 1e6 + 7;
const ll M = (ll) 1e6 + 3;

int get(string& s) {
	int res = 0;
	for (auto x : s) {
		res = res * 10 + int(x - '0');
	}
	return res;
}

bool can(int sum, int range, int num) {
	if (sum < num) {
		return false;
	}
	if (num == 0) {
		if (sum == 0)
			return true;
		else
			return false;
	}
	int av = sum / num, cnt = sum % num;
	if (av + min(cnt, 1) > range)
		return false;
	return true;
}

int main() {
	//ios_base::sync_with_stdio(0);
	//freopen("a", "r", stdin);
	string s;
	vector<string> a;
	a.push_back("+");
	while(cin >> s) {
		a.push_back(s);
	}
	int aim = get(a.back()), ps = 0, ng = 0;
	for (auto x : a) {
		if (x == "+")
			++ps;
		else if (x == "-")
			++ng;
	}
	for (int i = aim; i < 10 * N; i++) {
		int sum_left = i, sum_right = i - aim;
		bool ff = can(sum_left, aim, ps);
		bool ss = can(sum_right, aim, ng);
		if (!ff || !ss) continue;
		int fa = 0, ak = 0;
		int fb = 0, bk = 0;
		int sa = 0, ck = 0;
		int sb = 0, dk = 0;
		fa = sum_left / ps; ak = ps - (sum_left % ps);
		fb = sum_left / ps + min(sum_left % ps, 1), bk = sum_left % ps;
		if (ng != 0) {
			sa = sum_right / ng; ck = ng - (sum_right % ng);
			sb = sum_right / ng + min(sum_right % ng, 1), dk = sum_right % ng;
		}
		vector<int> pos, neg;
		for (int i = 0; i < ak; i++)
			pos.push_back(fa);
		for (int i = 0; i < bk; i++)
			pos.push_back(fb);
		for (int i = 0; i < ck; i++)
			neg.push_back(sa);
		for (int i = 0; i < dk; i++)
			neg.push_back(sb);
		cout << "Possible\n";
		for (int i = 0; i < (int)a.size(); i++) {
			if (a[i] == "+") {
				if (i != 0) cout << "+ ";
				cout << pos.back() << ' ';
				pos.pop_back();
			} else if (a[i] == "-") {
				cout << "- ";
				cout << neg.back() << ' ';
				neg.pop_back();
			}
		}
		cout << "= " << aim;
		return 0;
	}
	cout << "Impossible";
	return 0;
}


#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = (int) 1e6 + 7;
const ll M = (ll) 1e6 + 3;

int get(string& s) {
	int res = 0;
	for (auto x : s) {
		res = res * 10 + int(x - '0');
	}
	return res;
}

bool can(int sum, int range, int num) {
	if (sum < num) {
		return false;
	}
	if (num == 0) {
		if (sum == 0)
			return true;
		else
			return false;
	}
	int av = sum / num, cnt = sum % num;
	if (av + min(cnt, 1) > range)
		return false;
	return true;
}

int main() {
	//ios_base::sync_with_stdio(0);
	//freopen("a", "r", stdin);
	string s;
	vector<string> a;
	a.push_back("+");
	while(cin >> s) {
		a.push_back(s);
	}
	int aim = get(a.back()), ps = 0, ng = 0;
	for (auto x : a) {
		if (x == "+")
			++ps;
		else if (x == "-")
			++ng;
	}
	for (int i = aim; i < N; i++) {
		int sum_left = i, sum_right = i - aim;
		bool ff = can(sum_left, aim, ps);
		bool ss = can(sum_right, aim, ng);
		if (!ff || !ss) continue;
		int fa = 0, ak = 0;
		int fb = 0, bk = 0;
		int sa = 0, ck = 0;
		int sb = 0, dk = 0;
		fa = sum_left / ps; ak = ps - (sum_left % ps);
		fb = sum_left / ps + min(sum_left % ps, 1), bk = sum_left % ps;
		if (ng != 0) {
			sa = sum_right / ng; ck = ng - (sum_right % ng);
			sb = sum_right / ng + min(sum_right % ng, 1), dk = sum_right % ng;
		}
		vector<int> pos, neg;
		for (int i = 0; i < ak; i++)
			pos.push_back(fa);
		for (int i = 0; i < bk; i++)
			pos.push_back(fb);
		for (int i = 0; i < ck; i++)
			neg.push_back(sa);
		for (int i = 0; i < dk; i++)
			neg.push_back(sb);
		cout << "Possible\n";
		for (int i = 0; i < (int)a.size(); i++) {
			if (a[i] == "+") {
				if (i != 0) cout << "+ ";
				cout << pos.back() << ' ';
				pos.pop_back();
			} else if (a[i] == "-") {
				cout << "- ";
				cout << neg.back() << ' ';
				neg.pop_back();
			}
		}
		cout << "= " << aim;
		return 0;
	}
	cout << "Impossible";
	return 0;
}


#include<bits/stdc++.h>
#define forn(i,n) for(int i=0;i<int(n);i++)
#define pb push_back
#define mp make_pair
typedef long long int lint;

using namespace std;

int c[3],n;
string s;
string lpm="012";

void padelante(int idp,int idn){
	int id=0;
	while(id<s.size()&&c[idp]>0){
		if(s[id]==lpm[idp]){
			s[id]=lpm[idn];
			c[idn]++;
			c[idp]--;
		}
		id++;
	}
}

void paatras(int idp,int idn){
	int id=s.size()-1;
	while(id>-1&&c[idp]>0){
		if(s[id]==lpm[idp]){
			s[id]=lpm[idn];
			c[idn]++;
			c[idp]--;
		}
		id--;
	}
}

int lpm2(int id){
	int res=0;
	while(lpm[res]!=s[id])res++;
	return res;
}

void solve(){
	if(c[0]<0){
		int id=0;
		while(id<n&&c[0]<0&&c[lpm2(id)]>0){
			c[id]--;
			s[id]=lpm[0];
			c[0]++;
			id++;
		}
	}
	else{
		int id=n-1;
		while(id>-1&&c[0]>0&&s[id]==lpm[0]){
			int idn=2;
			if(c[idn]>=0)idn=1;
			s[id]=lpm[idn];
			c[idn]++;
			c[0]--;
			id--;
		}
	}
	if(c[1]<0)padelante(2,1);
	else paatras(1,2);

}

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);

	#ifdef ACMTUYO
		freopen("in.txt", "r", stdin);
	#endif

	cin>>n>>s;
	forn(i,3)c[i]=-n/3;
	forn(i,s.size()){
		int id=0;
		while(lpm[id]!=s[i])id++;
		c[id]++;
	}
	solve();

	cout<<s<<endl;

	return 0;
}