Mad scientist Mike is busy carrying out experiments in chemistry. Today he will attempt to join three atoms into one molecule.A molecule consists of atoms, with some pairs of atoms connected by atomic bonds. Each atom has a valence number — the number of bonds the atom must form with other atoms. An atom can form one or multiple bonds with any other atom, but it cannot form a bond with itself. The number of bonds of an atom in the molecule must be equal to its valence number.  Mike knows valence numbers of the three atoms. Find a molecule that can be built from these atoms according to the stated rules, or determine that it is impossible.

The single line of the input contains three space-separated integers a, b and c (1 ≤ a, b, c ≤ 106) — the valence numbers of the given atoms.

If such a molecule can be built, print three space-separated integers — the number of bonds between the 1-st and the 2-nd, the 2-nd and the 3-rd, the 3-rd and the 1-st atoms, correspondingly. If there are multiple solutions, output any of them. If there is no solution, print "Impossible" (without the quotes).

NoteThe first sample corresponds to the first figure. There are no bonds between atoms 1 and 2 in this case.The second sample corresponds to the second figure. There is one or more bonds between each pair of atoms.The third sample corresponds to the third figure. There is no solution, because an atom cannot form bonds with itself.The configuration in the fourth figure is impossible as each atom must have at least one atomic bond.

#include <stdio.h>
int main()
{
	int a,b,c,i,j;
	scanf("%d %d %d",&a,&b,&c);
	i=a-b;
	if(i<0)i*=-1;
	j=a+b+c;
	if(c<i||c>a+b||j%2>0)
		printf("Impossible");
	else
		printf("%d %d %d",j/2-c,j/2-a,j/2-b);
	return 0;
}

#include<stdio.h>
int main()
{
    int a,b,c,i,otw,oth,twth;
    scanf("%d %d %d",&a,&b,&c);
    for(i=0;i<=a;i++)
    {
	otw=i;
	twth=c-a+i;
	oth=a-i;

	if(b-(otw+twth)==0 && otw>=0 && twth>=0 && oth>=0)
	{
	   printf("%d %d %d\n",otw,twth,oth);
	   break;
	}
    }
    if(i>a)
	printf("Impossible\n");
    return 0;
}

#include<stdio.h>
#include<stdlib.h>
#define swap(a,b) (a)=(a)+(b)-((b)=(a))
int main()
{
	int mols[3];
	int i,j,k,max=0,sum=0;
	for(i=0;i<3;i++)
	{
		scanf("%d",&mols[i]);
		if(mols[i]>max)
		{
			max=mols[i];
			k=i;
		}
		sum+=mols[i];
	}
	int d;
	d=sum-2*mols[k];
	if(d<0||d%2==1)
	{
		printf("Impossible\n");
	}
	else
	{
		d>>=1;
		for(i=0;i<3;i++)
		{
			j=(i+1)%3;
			if(i!=k&&j!=k)
				printf("%d ",d);
			else if(i!=k&&j==k)
				printf("%d ",mols[i]-d);
			else
				printf("%d ",mols[j]-d);
		}
		printf("\n");
	}
	return 0;
}

#include<stdio.h>
int main()
{
    long long a,b,c,x,y,z;
    scanf("%lld%lld%lld",&a,&b,&c);
    if((a+b+c)%2==0)
    {
        x=(a+b-c)/2;
        y=(b+c-a)/2;
        z=(c+a-b)/2;
        if(x>=0 && y>=0 && z>=0)
        printf("%lld %lld %lld\n",x,y,z);
        else
        printf("Impossible\n");
    }
        else
        printf("Impossible\n");
        return 0;
}

#include <stdio.h>
#include <conio.h>
int a,b,c;
int main(){
	scanf("%d %d %d",&a,&b,&c);
	if((a+b+c)%2==0 && a+b>=c && a+c>=b && b+c>=a){
		printf("%d %d %d\n",(a+b-c)/2,(b+c-a)/2,(a+c-b)/2);
	}
	else printf("Impossible\n");
	return 0;
}

#include <stdio.h>

int main(void) {
    int a,b,c,ans,i,j,x,y,z,max;
    scanf("%d %d %d",&a,&b,&c);
    if(a>b+c || b>a+c || c>a+b || (a+b+c)%2!=0)
    printf("Impossible");
    else
    {

        if(b>a && b>c)
        max=b;
        else if(a>b && a>c)
        max=a;
        else
        max=c;

        if(max==a)
        {
            y=(b+c-a)/2;
            x=b-y;
            z=c-y;
            //printf("a");
        }
        else if(max==b)
        {
            z=(a+c-b)/2;
            x=a-z;
            y=c-z;
            //printf("b");
        }
        else if(max==c)
        {
            x=(a+b-c)/2;
            z=a-x;
            y=b-x;
            //printf("c");
        }
        printf("%d %d %d",x,y,z);
    }
    return 0;
}

#include <stdio.h>
int main(void)
{
    int a,b,c,d,e,f,s;
    scanf("%d%d%d",&a,&b,&c);
    if((a+b+c)%2==1){
        printf("Impossible\n");
        return 0;
    }
    else{
        s=(a+b+c)/2;
        d=s-c;
        e=s-b;
        f=s-a;
        if(d>=0&&e>=0&&f>=0){
            printf("%d %d %d\n",d,f,e);
            return 0;
        }
    }
    printf("Impossible\n");
    return 0;
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long long int a , b , c , counter , diff1 , diff2 , temp ;
    int flag1 = 0 , flag2 = 0;
    scanf("%I64d %I64d %I64d",&a ,&b,&c);
    if ( b > c){
        temp = b;
        b = c ;
        c = temp ;
        flag1 ++;
    }
    if ( a > c){
        temp = a ;
        a = c;
        c = temp;
        flag2 ++ ;
    }
    for (counter = 0 ; counter <= c ; counter ++){
        if ( (a - counter) == (b - (c - counter)) && a >= counter && b >= (c - counter) ){
                if (flag1 == 0 && flag2 == 0){
                    printf("%I64d %I64d %I64d", a - counter , c - counter , counter);
                    return 0;
                }
                if ( flag1 == 1 && flag2 == 0){
                    printf("%I64d %I64d %I64d", counter , c - counter   ,a - counter);
                    return 0;
                }
                if (flag1 == 1 && flag2 == 1){
                    printf("%I64d %I64d %I64d",c - counter , counter , a - counter );
                    return 0;
                }
                if (flag2 == 1 && flag1 == 0){
                    printf("%I64d %I64d %I64d",c - counter, a - counter , counter);
                    return 0;
                }
        }
        else if ( (b - counter) == (a - (c - counter)) && a>= (c - counter) && (b >= counter )){
                if (flag1 == 0 && flag2 == 0){
                       printf("%I64d %I64d %I64d" , b - counter , counter , c - counter);
                       return 0;
                    }
                if (flag1 == 1 && flag2 == 0){
                        printf("%I64d %I64d %I64d" ,c - counter  , counter , b - counter );
                        return 0;
                    }
                if ( flag1 == 1 && flag2 == 1){
                        printf("%I64d %I64d %I64d" ,counter ,c - counter , b - counter );
                        return 0;
                    }
                if (flag2 == 1 && flag1 == 0){
                       printf("%I64d %I64d %I64d" ,counter , b - counter ,  c - counter);
                       return 0;
                }
        }
    }
    printf("Impossible");
    return 0;
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long long int a, b, c, d, e, f;
    scanf("%I64d %I64d %I64d", &a, &b, &c);
    if ((a + b + c) % 2) printf("Impossible\n");
    else {
        d = (b + c - a) / 2;
        e = (c + a - b) / 2;
        f = (b + a - c) / 2;
        if ((d < 0) || (e < 0) || (f < 0)) printf("Impossible\n");
        else if ((d == 0) && (e == 0)) printf("Impossible\n");
        else if ((e == 0) && (f == 0)) printf("Impossible\n");
        else if ((d == 0) && (f == 0)) printf("Impossible\n");
        else printf("%I64d %I64d %I64d\n", f, d, e);
    }
    return 0;
}

#include<stdio.h>
int main()
{
	int sum,a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	sum=(a+b+c)/2;
	if((a+b+c)%2==1 || a==0 || b==0 || c==0 || sum<a || sum< b || sum<c)
		printf("Impossible\n");
	else
		printf("%d %d %d\n",sum-c,sum-a,sum-b);
	return 0;
}

#include <stdio.h>
int main()
{
	int a,b,c,x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	x=(a+b-c)/2;
	y=(b+c-a)/2;
	z=(a+c-b)/2;
	if((a+b+c)%2!=0)
	printf("Impossible");
	else
	{
	if(x>=0&&y>=0&&z>=0)
	printf("%d %d %d",x,y,z);
	else
	printf("Impossible");
	}
	return 0;
 }

#include<stdio.h>
#include<string.h>
int max(int a,int b,int c)
{
	if(a>=b && a>=c) return 1;
	else if(b>a && b>=c) return 2;
	else return 3;
}
int main()
{
	int a,b,c,i,s1=0,s2=0,s3=0,index;
	scanf("%d %d %d",&a,&b,&c);
	while(a>0 && b>0 && c>0)
	{
		if(a==1 && b==1 && c==1)
		{ printf("Impossible\n");break;}
		index=max(a,b,c);
		if(index==1) { a=a-2; b--;c--;s1++;s2++;}
		else if(index==2) {b=b-2; a--;c--; s1++;s3++;}
		else { c=c-2;a--;b--; s2++;s3++;}
	}
	if(a==0)
	{
		if(b!=c) printf("Impossible\n");
		else printf("%d %d %d\n",s1,s3+b,s2);
	}
	else if(b==0)
	{
		if(a!=c) printf("Impossible\n");
		else printf("%d %d %d\n",s1,s3,s2+a);

	}
	else if(c==0)
	{
		if(a!=b) printf("Impossible\n");
		else printf("%d %d %d\n",s1+a,s3,s2);
	}
	return 0;
}

#include<stdio.h>
int main()
{
	int a,b,c;
	int x,y,z;

	int sum = 0;

	scanf("%d%d%d",&a,&b,&c);

	sum = (a + b + c)/2;

	if((a + b + c) % 2 != 0 || sum - a  < 0 || sum - b < 0 || sum - c < 0)
	{
		printf("Impossible\n");
	}
	else
	{
		printf("%d %d %d\n",sum-c,sum-a,sum-b);
	}

	return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a, b, c, i, j, k=0, aray[3], mx, mn, md;
    scanf("%d %d %d", &a, &b, &c);
    if(a==b && b==c){
        if(a%2==1) printf("Impossible");
        else printf("%d %d %d",a/2, a/2, a/2);
        return 0;
    }
    else if(a+b==c){
        printf("%d %d %d", 0, b, a);
    }
    else if(b+c==a){
        printf("%d %d %d", b, 0, c);
    }
    else if(c+a==b){
        printf("%d %d %d", a, c, 0);
    }
    else{
        aray[0]=a;
        aray[1]=b;
        aray[2]=c;
        for(i=1;i<3;i++){
            j=i;
            while(j>0 && aray[j]<aray[j-1]){
                aray[j]^=aray[j-1];
                aray[j-1]^=aray[j];
                aray[j]^=aray[j-1];
                j--;
            }
        }
        mx=aray[2];
        mn=aray[0];
        md=aray[1];
        if(mn+md<mx){
            printf("Impossible");
            return 0;
        }
        else{
            if(a+b>c){
                while(a+b!=c){
                    k++;
                    a--;
                    b--;
                    if(a+b<c){
                        break;
                    }
                }
                if(a+b==c){
                    printf("%d %d %d", k, b, a);
                }
                else{
                    printf("Impossible");
                }
            }
            else if(b+c>a){
                while(c+b!=a){
                    k++;
                    c--;
                    b--;
                    if(c+b<a){
                        break;
                    }
                }
                if(c+b==a){
                    printf("%d %d %d",b, k, c);
                }
                else{
                    printf("Impossible");
                }
            }
            else if(c+a>b){
                while(a+c!=b){
                    k++;
                    a--;
                    c--;
                    if(a+c<b){
                        break;
                    }
                }
                if(a+c==b){
                    printf("%d %d %d", a, c, k);
                }
                else{
                    printf("Impossible");
                }
            }
        }

    }

    return 0;
}

#include<stdio.h>
int main()
{
    int a,b,c,i=0,A,B,C;
    scanf("%d %d %d", &a,&b,&c);
   if (a<b+c && b<a+c && c<a+b)
        {
            for(A=1;A<=a;A++)
            {
                C=a-A;
                B=((a+b+c)/2)-(A+C);
                if(A+B+C==((a+b+c)/2) && b==A+B && c==B+C)
                    {printf("%d %d %d",A,B,C);
                    i=0;
                    break;}
                else if (a==1 && b==1 && c==1)
                {printf("Impossible");
                i=0;
                break;}
                i++;
            }
            if(i!=0)
            {
                printf("Impossible");
            }

        }
    else if (a>b+c || b>a+c || c>a+b)
        printf("Impossible");
    else if (a==b+c)
        printf("%d %d %d", b,a-(b+c),c);
    else if (b==a+c)
        printf("%d %d %d", a,c,b-(a+c));
    else if (c==a+b)
        printf("%d %d %d", c-(a+b),b,a);

}

#include <stdio.h>

int main(void) {
    int a,b,c,i,n,f=0;
    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%d",&c);
    n=a;
    for(i=0;i<=n;i++)
    {
        if((b-i)==(c-n+i))
        {
            if((b-i<0) || (c-n+i<0))
            continue;
            f=1;
            break;
        }

    }
    if(f==1)
    printf("%d %d %d",i,b-i,n-i);
    else
    printf("Impossible");

    return 0;
}

#include <stdio.h>

int mmax( int a, int b) {
	if ( a > b ) return b;
	else return a;
}

int main()
{
	int i, j, k;
	int a, b, c;
	scanf("%d%d%d", &a, &b, &c);

	i = (b-c+a)/2;
	j = (c+b-a)/2;
	k = (a-b+c)/2;
	if ( i+j == b && i + k == a && j+k == c && i >= 0 && j >= 0 && k >= 0) printf("%d %d %d", i,j,k);
	else printf("Impossible");
	return 0;
}

#include<stdio.h>
int main()
{
    int a,b,c,bond12,bond13,bond23,bond32,i,flag=0,cnt;
    scanf("%d %d %d",&a,&b,&c);
    for(i=0;i<=a;i++)
    {
        bond12=i;
        bond13=a-i;
        bond23=b-bond12;
        bond32=c-bond13;
        if((bond23==bond32)&&(bond23>=0))
        {
            cnt=0;
            if(bond12)
            cnt++;
            if(bond23)
            cnt++;
            if(bond13)
            cnt++;
            if(cnt>1)
            {
                flag=1;
                break;
            }
        }
    }
    if(flag)
    printf("%d %d %d",bond12,bond23,bond13);
    else
    printf("Impossible");
    return 0;
}

#include <stdio.h>
#include <conio.h>

int a,b,c,maxe;
int s,t,i,check;
int main()
{

    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%d",&c);

    if(a>=b)
    {
        if(c>=a)
        {
            maxe=c;
            molecule(a,b,maxe);

        }
        else
            {
            maxe=a;
            molecule(b,c,maxe);
            }
    }
    else if(b>=a)
        {
            if(c>=b)
            {

            maxe=c;
        molecule(a,b,maxe);
        }
        else
        {
            maxe=b;
            molecule(a,c,maxe);
        }
           }
           return 0;
}
    molecule(int u,int v,int muxe)
    {
  check=1;
    for(i=0;i<=muxe;i++)
    {

        s=u-i;
        t=v-(muxe-i);
        if(s==t)
        {
          if(i>=0&&(muxe-i)>=0&&s>=0){
          out(i,muxe-i,s);
          check=0;
          }
        }

    }
    if(check)
        printf("Impossible");
    }
   int out(int x,int y,int z)
    {

       if(a>=b)
    {
        if(c>=a)
        {
            maxe=c;
            printf("%d ",z);
            printf("%d ",y);
            printf("%d ",x);
        }
        else
            {
            maxe=a;
            printf("%d ",x);
            printf("%d ",z);
            printf("%d ",y);

            }
    }
   else if(b>=a)
           {

               if(c>=b)
            {

            maxe=c;
            printf("%d ",z);
            printf("%d ",y);
            printf("%d ",x);
        }
        else
        {
            maxe=b;
            printf("%d ",x);
            printf("%d ",y);
            printf("%d ",z);
        }
           }
           return 0;
           }

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    int x,y,z;
    if(a+b-c>=0&&(a+b-c)%2==0){
        x=(a+b-c)/2;
        y=a-x;
        z=c-y;
        if(y>=0&&z>=0){
            printf("%d %d %d",x,z,y);
        }
        else printf("Impossible");
    }
    else printf("Impossible");
    return 0;
}

#include <stdio.h>
int main() {
    int a,b,c,x,m,arr[3],i,j,y;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b+c||b>a+c||c>a+b){
        printf("Impossible\n");
        return 0;
    }
    arr[0]=a;arr[1]=b;arr[2]=c;
    for(i=1;i<=2;i++)
        for(j=0;j<=2-i;j++)
        {

    if(arr[j+1]<arr[j])
        {
        x=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=x;
        }
    }
    x=(arr[1]+arr[0]-arr[2]);
    y=x/2;
    //printf("%d\n",y);
    if(x%2!=0||arr[1]+arr[0]-2*y!=arr[2]){
        printf("Impossible\n");
        return 0;
    }
    if(arr[2]==c){
        printf("%d %d %d\n",y,b-y,a-y);
    }
    else if(arr[2]==a){
        printf("%d %d %d\n",b-y,y,c-y);
    }
    else if(arr[2]==b){
        printf("%d %d %d\n",a-y,c-y,y);
    }
    return 0;

}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c;
    int one_two = 0, one_three = 0, two_three = 0;
    scanf("%d %d %d", &a, &b, &c);
    if(a+b<c || a+c < b || b+c < a || (a+b+c)%2 == 1){
        printf("Impossible\n");
    }
    else{
        one_three = (a+c-b)/2;
        one_two = a-one_three;
        two_three = b - one_two;
        printf("%d %d %d\n", one_two, two_three, one_three);
    }
    return 0;
}

#include<stdio.h>
int main()
{
	int x,y,z,a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	if(a==0 || b==0 || c==0)
	{
		printf("Impossible");
		return 0;
	}
	/*if(a>12 || b>12 || c>12)
	{
		printf("Impossible");
		return 0;
	}*/
	if((a+b+c)%2!=0)
	{
		printf("Impossible");
		return 0;
	}
	x=(a+b-c)/2;
	y=(b+c-a)/2;
	z=(a+c-b)/2;
	if(x<0 || y<0 || z<0){
		printf("Impossible");
		return 0;}

	if(x==0 && y==0 && z==0){
		printf("Impossible");
		return 0;}
	if(x==0 && y==0 || x==0 && z==0 && y==0 && z==0){
		printf("Impossible");
		return 0;}
	else
		printf("%d %d %d",x,y,z);

	return 0;
}

/*  AUTHOR:AKASH JAIN
*   USERNAME:akash19jain
*   DATE:14/10/2019
*/
// #include<algorithm>
// #include <bits/stdc++.h>
// using namespace std;

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
#include<ctype.h>
#define SC1(x)          scanf("%lld",&x)
#define SC2(x,y)        scanf("%lld%lld",&x,&y)
#define SC3(x,y,z)      scanf("%lld%lld%lld",&x,&y,&z)
#define SCS(x)          scanf("\n%s", x)
#define PF1(x)          printf("%lld\n",x)
#define PF2(x,y)        printf("%lld %lld\n",x,y)
#define PF3(x,y,z)      printf("%lld %lld %lld\n",x,y,z)
#define PFN                printf("\n")
#define REP(i,n)        for(long long i=0;i<(n);i++)
#define FOR(i,a,b)      for(long long i=(a);i<=(b);i++)
#define FORD(i,a,b)     for(long long i=(a);i>=(b);i--)
#define WHILE(n)        while(n--)
#define MEM(a, b)       memset(a, (b), sizeof(a))
#define ITOC(c)         ((char)(((ll)'0')+c))
#define MID(s,e)        (s+(e-s)/2)
#define SZ(a)            strlen(a)
#define MOD             1000000007
#define MAX             10000000005
#define MIN             -10000000005
#define PI              3.1415926535897932384626433832795
#define DEB(x)          printf("The value of \"%s\" is: %d\n",#x,x)
#define CASES           ll t;SC1(t);while(t--)
#define ABS(a)          ((a>0)?a:-(a))
#define SWAP(a,b)        ll z=a;a=b;b=z
#define SWAPC(a,b)        char z=a;a=b;b=z

const int INF = 1<<29;
typedef long long ll;
typedef unsigned long long ull;
#define FILEIO(name) \  freopen(name".in", "r", stdin); \   freopen(name".out", "w", stdout);
int cmp(const void * a,const void * b);
long long maxv(long long a,long long b);
long long minv(long long a,long long b);
long long gcd(long long u,long long v);
long long digits(long long n);
bool isPoweroftwo(long long n);

int main()
{
    ll a,b,c;
    SC3(a,b,c);
    if((a+b+c)%2!=0)
    {
        printf("Impossible\n");
        return 0;
    }
    ll x,y,z;
    x=(b+a-c)/2;
    y=(b+c-a)/2;
    z=(c+a-b)/2;
    if(x<0 ||y<0 || z<0)
    {
        printf("Impossible\n");
        return 0;
    }
    PF3(x,y,z);
    return 0;
}

//qsort(arr,n,sizeof(arr[0]),cmp);
int cmp (const void * a, const void * b)
{
    if( *(ll*)a - *(ll*)b < 0 ) return -1;
    if( *(ll*)a - *(ll*)b > 0 ) return 1;
        return 0;
}
long long maxv(long long a,long long b)
{
    if(a>b) return a;
        return b;
}
long long minv(long long a,long long b)
{
    if(a<b) return a;
        return b;
}
long long gcd(long long u,long long v)
{
    if (v == 0) return u;
       return gcd(v, u%v);
}
long long digits(long long n)    //to calculate no of digits in a number
{
    return floor(log10(n))+1;
}
bool isPoweroftwo(long long x)
{
    return x && (!(x&(x-1)));
}

#include<stdio.h>
int main()
{
	int a,b,c,x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	int res1=b-c+a;
	int res2=b-a+c;
	int res3=a-b+c;
	x=res1/2;
	y=res2/2;
	z=res3/2;
	int count=0;
	if(x==0)count++;
	if(y==0)count++;
	if(z==0)count++;
	int x1=res1%2;
	int y1=res2%2;
	int z1=res3%2;
	int flag=0;
	if(x<0 || y<0 || z<0)
	{
		flag=1;
	}
	if((res1>2 && x1!=0)  || (res2>2 && y1!=0) || (res3>2 && z1!=0))
		flag=1;
	if(count>1)
		flag=1;
	//if(x1!=0 || y1!=0 || z1!=0)
	//	printf("Impossible");
	if(flag==0)
		printf("%d %d %d",x,y,z);
	else
	{
		printf("Impossible");
		//printf("%d %d %d",x,y,z);
	}
	return 0;
}

#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 15
int main()
{
    int a,b,c,x,y,z;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF)
    {
        x=a+b-c;
    y=b+c-a;
    z=a+c-b;
    if(x%2==0&&y%2==0&&z%2==0&&x>=0&&y>=0&&z>=0)
        printf("%d %d %d\n",x/2,y/2,z/2);
    else
        printf("Impossible\n");
    }
    return 0;
}

#include<stdio.h>
int main()
{
	int a[3],i,j,temp,p,q,r,flag,num;
	for(i=0;i<3;i++)
	{
		scanf("%d",&a[i]);
	}
	num=a[0];
	flag=0;
	while(num>=0&&flag==0)
	{
		p=num;
		q=a[1]-num;
		r=a[0]-num;
	//	printf("%d %d %d\n",p,q,r);
		if(q+r==a[2]&&q>=0)
		{
			flag=1;
			printf("%d %d %d\n",p,q,r);
		}
		num--;
	}
	if(flag==0)
	{
		printf("Impossible\n");
	}
	return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a,b,c;
	int x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	if(abs(c-a-b)%2 == 0 && abs(b-c-a)%2 == 0 && abs(c-a-b)%2 == 0)
	{
		x = (c-a-b)/(-2);
		y = (b-c-a)/(-2);
		z = (a-b-c)/(-2);
		if(x >= 0 && y >= 0 && z >= 0)
		{
			printf("%d %d %d\n",x,z,y);
		}
		else
		{
			printf("Impossible\n");
		}
	}
	else
	{
		printf("Impossible\n");
	}
	return 0;
}

#include<stdio.h>
int main()
{
    int a,b,c,i,otw,oth,twth;
    scanf("%d %d %d",&a,&b,&c);
    for(i=0;i<=a;i++)
    {
	otw=i;
	twth=c-a+i;
	oth=a-i;

	if(b-(otw+twth)==0 && otw>=0 && twth>=0 && oth>=0)
	{
	   printf("%d %d %d\n",otw,twth,oth);
	   break;
	}
    }
    if(i>a)
	printf("Impossible\n");
    return 0;
}

#include <stdio.h>
#include <stdlib.h>
int vraie (int m1,int m4 ,int m3 ){
    if ((m4+m3>=m1)&&((m4+m3-m1)%2==0)){
        return 1 ;
    }
    else {
        return 0;
    }
    }
void aff (int h ,int tab1[4], int tab [4]){
    int h1 = (h+2)%3 ;
    int h2 = (h+1)%3 ;
    int c =(tab1[h1]+tab1[h2]-tab1[h])/2 ;
    tab[h]=tab1[h2]-c ;
    tab[h1]=tab1[h1]-c ;
    tab[h2]=c ;
    printf("%d %d %d",tab[0],tab[1],tab[2]) ;

}
int main()
{
    int a,b,c,h ;
    int tab1[4] ;
    int tab[4] ;
    scanf("%d %d %d",&a,&b,&c) ;
    tab1[0]=a ;
    tab1[1]=b ;
    tab1[2]=c ;
    if ((a<=b)&&(b<=c)){
        if (vraie(c,a,b)==1){
            h=2 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }
    else if ((b<=a)&&(a<=c)){
        if (vraie(c,a,b)==1){
            h=2 ;

            aff(h,tab1,tab) ;
        } else {
            printf("Impossible") ;
        }
    }

    else if ((b<=c)&&(c<=a)){
            if (vraie(a,c,b)==1){
            h=0 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    else if ((c<=b)&&(b<=a)){
        if (vraie(a,c,b)==1){
            h=0 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    else if ((c<=a)&&(a<=b)){
        if (vraie(b,c,a)==1){
            h=1 ;

            aff(h,tab1,tab) ;
        }
        else {
            printf("Impossible") ;
        }
    }

    else {
        if (vraie(b,c,a)==1){
            h=1 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a,b,c;

    scanf("%d %d %d",&a,&b,&c);

    int K = (a+b-c)/2;
    int K2 = (b+c-a)/2;
    if(K >= 0 && K2>= 0 && a- K >=0 && 2*(K + K2 + (a - K)) == (a + b + c))
    {
        printf("%d %d %d\n",K,K2,a-K);
    }
    else
    {
        printf("Impossible\n");
    }
    return 0;
}

#include<stdio.h>
int main(){
int va,vb,vc,nab,nbc,nca;
scanf("%d %d %d",&va,&vb,&vc);
nab=(va+vb-vc)/2;
nbc=(vb+vc-va)/2;
nca=(vc+va-vb)/2;
if((va+vb+vc)%2!=0)
printf("Impossible\n");
else if(nab<0||nbc<0||nca<0)
printf("Impossible\n");
else if(nab==0&&nbc==0||nbc==0&&nca==0||nca==0&&nab==0)
printf("Impossible\n");
else
printf("%d %d %d\n",nab,nbc,nca);
return 0;
}

#include <stdio.h>

int max3 (int a, int b, int c);

int main ()
{
    int b, c, d, e, i, j, g, temp, total;
    scanf ("%d", &c);
    scanf ("%d", &d);
    scanf ("%d", &e);
    total = (c + d + e) / 2;
    b = max3(c, d, e);
    if ( ((2*b - c - d - e) > -2) && ((2*b - c - d - e) != 0))
    {
        printf ("Impossible\n");
    }
    else
    {
        if ((2*b - c - d - e) % -2 < 0)
        {
            printf ("Impossible\n");
        }
        else
        {
            printf ("%d %d %d\n", (total - e), (total - c), (total - d));
        }
    }
return 0;
}
int max3 (int c, int d, int e)
{
    if (c > d)
    {
        if ( c > e)
        {
            return c;
        }
        else
        {
            return e;
        }
    }
    else
    {
        if (d > e)
        {
            return d;
        }
        else
        {
            return e;
        }
    }
}

#include<stdio.h>
int main(){
    int a,b,c,d;
    scanf("%d%d%d",&a,&b,&c); int order;
    if(a==0 || b==0 || c==0){
    printf("Impossible");
    return 0;
    }
    int max=a;
    order=1;
    if(b>max){
        max=b; order=2;}
    if(c>max){
        max=c; order=3;}
    int i;
    for(i=0;i<=max;i++){
    if(order==1 && (b-i)==(c-(max-i)) && (b-i)>=0){
    printf("%d %d %d",i,b-i,max-i);
    return 0;
    }
    if(order==1 && (c-i)==(b-(max-i)) && (c-i)>=0){
    printf("%d %d %d",max-i,b-i,i);
    return 0;
    }
    if(order==2 && (a-i)==(c-(max-i)) && (a-i)>=0){
    printf("%d %d %d",i,max-i,a-i);
    return 0;
    }
    if(order==2 && (c-i)==(a-(max-i)) && (c-i)>=0){
    printf("%d %d %d",max-i,i,c-i);
    return 0;
    }
    if(order==3 && (a-i)==(b-(max-i)) && (a-i)>=0){
    printf("%d %d %d",a-i,max-i,i);
    return 0;
    }
    if(order==3 && (b-i)==(a-(max-i)) && (b-i)>=0){
    printf("%d %d %d",b-i,i,max-i);
    return 0;
    }
    }
    printf("Impossible");

}

#include<stdio.h>
int main()
{long long a,b,c,m,n,i,j,cnt,k,a1,a2,a3;
scanf("%I64d%I64d%I64d",&a,&b,&c);

for(i=0;i<=a;i++)
{
if((a+b+c)==2*(b+a-i))
{cnt=1; break;}
else
cnt=0;
}
a1=i; a2=b-i; a3=a-i;
if(cnt==1&&a1>-1&&a2>-1&&a3>-1)
printf("%I64d %I64d %I64d",a1,a2,a3);
else
printf("Impossible");
return 0;
}

#include <stdio.h>

int main()
{
    int a, b, c, x, y, z, s;
    scanf("%d %d %d", &a, &b, &c);
    s = a + b + c;
    if (s % 2)
    {
        printf("Impossible");
        return 0;
    }
    s /= 2;
    if (s - c >= 0)
        x = s - c;
    else
    {
        printf("Impossible");
        return 0;
    }
    if (s - a >= 0)
        y = s - a;
    else
    {
        printf("Impossible");
        return 0;
    }
    if (s - b >= 0)
        z = s - b;
    else
    {
        printf("Impossible");
        return 0;
    }
    printf("%d %d %d", x, y, z);
    return 0;
}

#include<stdio.h>
int main()
{
	int a,b,c;
	int x,y,z;

	int sum = 0;

	scanf("%d%d%d",&a,&b,&c);

	sum = (a + b + c)/2;

	if((a + b + c) % 2 != 0 || sum - a  < 0 || sum - b < 0 || sum - c < 0)
	{
		printf("Impossible\n");
	}
	else
	{
		printf("%d %d %d\n",sum-c,sum-a,sum-b);
	}

	return 0;
}

#include <stdio.h>
int main()
{
	int a,b,c,i,j;
	scanf("%d %d %d",&a,&b,&c);
	i=a-b;
	if(i<0)i*=-1;
	j=a+b+c;
	if(c<i||c>a+b||j%2>0)
		printf("Impossible");
	else
		printf("%d %d %d",j/2-c,j/2-a,j/2-b);
	return 0;
}

#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    if((a+b+c)%2!=1&&(a+b>=c&&a+c>=b&&b+c>=a))
    printf("%d %d %d",(a+b-c)/2,(b+c-a)/2,(a+c-b)/2);
    else
    printf("Impossible");
    return 0;
}

#include<stdio.h>
int main()
{
    long int a,b,c,i,k,x,y,z;
    scanf("%ld %ld %ld",&a,&b,&c);
    if(a>b+c||b>a+c||c>a+b)
    {
        printf("Impossible\n");
    }
    else
    {
        for(i=0;i<=a;i++)
        {
            if(b-i==c-(a-i))
            {
                break;
            }
        }
        if(i>a)
        {
            printf("Impossible\n");
        }
        else
        {
        printf("%ld %ld %ld\n",i,b-i,a-i);
        }
    }
    return 0;
}

#include<stdio.h>

int main(void){
  int a,b,c,i,flg,S,ans[3]={0};
  scanf("%d %d %d",&a,&b,&c);
  S=a+b+c;
  flg=0;
  if(S%2) puts("Impossible");
  else{
    S/=2;
    ans[0]=S-c;
    ans[1]=S-a;
    ans[2]=S-b;
    for(i=0;i<3;i++){
      if(ans[i]<0){
	puts("Impossible");
	flg=1;
	break;
      }
    }
    if(!flg) printf("%d %d %d\n",ans[0],ans[1],ans[2]);
  }
  return 0;
}

#include <stdio.h>
#include <stdlib.h>
int vraie (int m1,int m2 ,int m4 ){
    if ((m2+m4>=m1)&&((m2+m4-m1)%2==0)){
        return 1 ;
    }
    else {
        return 0;
    }
    }
void aff (int h ,int tab1[4], int tab [4]){
    int h1 = (h+2)%3 ;
    int h2 = (h+1)%3 ;
    int c =(tab1[h1]+tab1[h2]-tab1[h])/2 ;
    tab[h]=tab1[h2]-c ;
    tab[h1]=tab1[h1]-c ;
    tab[h2]=c ;
    printf("%d %d %d",tab[0],tab[1],tab[2]) ;

}
int main()
{
    int a,b,c,h ;
    int tab1[4] ;
    int tab[4] ;
    scanf("%d %d %d",&a,&b,&c) ;
    tab1[0]=a ;
    tab1[1]=b ;
    tab1[2]=c ;
    if ((a<=b)&&(b<=c)){
        if (vraie(c,a,b)==1){
            h=2 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }
    else if ((b<=a)&&(a<=c)){
        if (vraie(c,a,b)==1){
            h=2 ;

            aff(h,tab1,tab) ;
        } else {
            printf("Impossible") ;
        }
    }

    else if ((b<=c)&&(c<=a)){
            if (vraie(a,c,b)==1){
            h=0 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    else if ((c<=b)&&(b<=a)){
        if (vraie(a,c,b)==1){
            h=0 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    else if ((c<=a)&&(a<=b)){
        if (vraie(b,c,a)==1){
            h=1 ;

            aff(h,tab1,tab) ;
        }
        else {
            printf("Impossible") ;
        }
    }

    else {
        if (vraie(b,c,a)==1){
            h=1 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    return 0;
}

#include <stdio.h>

int main() {
	int a, b, c, x;

	scanf("%d%d%d", &a, &b, &c);
	for (x = 0; x <= a; x++)
		if (b >= a - x && x + (b - (a - x)) == c && c >= x && (a - x) + (c - x) == b) {
			printf("%d %d %d\n", a - x, c - x, x);
			return 0;
		}
	printf("Impossible\n");
	return 0;
}

#include <stdio.h>

int main()
{
	int a,b,c,i;
	scanf("%d %d %d",&a,&b,&c);
	for(i=0;i<=a;++i)
	{
		if(b-i==c-a+i&&(b-i)>=0&&(c-a+i)>=0)
		{
			printf("%d %d %d\n",i,b-i,a-i);
			return 0;
		}
	}
	printf("Impossible\n");
	return 0;
}

#include <stdio.h>
#include <stdlib.h>
int vraie (int m1,int m2 ,int m3 ){
    if ((m2+m3>=m1)&&((m2+m3-m1)%2==0)){
        return 1 ;
    }
    else {
        return 0;
    }
    }
void aff (int h ,int tab1[4], int tab [4]){
    int h1 = (h+2)%3 ;
    int h2 = (h+1)%3 ;
    int c =(tab1[h1]+tab1[h2]-tab1[h])/2 ;
    tab[h]=tab1[h2]-c ;
    tab[h1]=tab1[h1]-c ;
    tab[h2]=c ;
    printf("%d %d %d",tab[0],tab[1],tab[2]) ;

}
int main()
{
    int a,b,c,h ;
    int tab1[4] ;
    int tab[4] ;
    scanf("%d %d %d",&a,&b,&c) ;
    tab1[0]=a ;
    tab1[1]=b ;
    tab1[2]=c ;
    if ((a<=b)&&(b<=c)){
        if (vraie(c,a,b)==1){
            h=2 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }
    else if ((b<=a)&&(a<=c)){
        if (vraie(c,a,b)==1){
            h=2 ;

            aff(h,tab1,tab) ;
        } else {
            printf("Impossible") ;
        }
    }

    else if ((b<=c)&&(c<=a)){
            if (vraie(a,c,b)==1){
            h=0 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    else if ((c<=b)&&(b<=a)){
        if (vraie(a,c,b)==1){
            h=0 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    else if ((c<=a)&&(a<=b)){
        if (vraie(b,c,a)==1){
            h=1 ;

            aff(h,tab1,tab) ;
        }
        else {
            printf("Impossible") ;
        }
    }

    else {
        if (vraie(b,c,a)==1){
            h=1 ;

            aff(h,tab1,tab) ;
        }
         else {
            printf("Impossible") ;
        }
    }

    return 0;
}

/*Codeforces Round #200 (Div. 2)    B. Simple Molecules*/
#include <stdio.h>
int Max(int a[],int n);
int main()
{
    int a[4],x,y,z,i,max,min;
    for (i=1;i<=3;i++)
        scanf ("%d",&a[i]);
    max=Max(a,3);
    i=0;
    for (x=0;x<max&&i==0;x++)
    {
        y=a[2]-x;
        z=a[1]-x;
        if (z+y==a[3]&&y>=0&&z>=0)
        {
            printf ("%d %d %d\n",x,y,z);
            i=1;
        }
    }
    if (i==0)
        printf ("Impossible\n");
    return 0;
}
int Max(int a[],int n)
{
    int max=a[1],i;
    for (i=2;i<=n;i++)
    {
        if (max<a[i])
            max=a[i];
    }
    return max;
}

#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 15
int main()
{
    int a,b,c,x,y,z;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF)
    {
        x=a+b-c;
    y=b+c-a;
    z=a+c-b;
    if(x%2==0&&y%2==0&&z%2==0&&x>=0&&y>=0&&z>=0)
        printf("%d %d %d\n",x/2,y/2,z/2);
    else
        printf("Impossible\n");
    }
    return 0;
}

#include <stdio.h>
#include <math.h>

int main(){
int a,b,c, semisuma, a_b, b_c, c_a;
scanf("%d %d %d", &a,&b,&c);
semisuma=(a+b+c)/2;

b_c=semisuma-a;
a_b=semisuma-c;
c_a=semisuma-b;

if ((a+b+c)%2 || b_c<0 || a_b<0 || c_a<0) printf("Impossible");
else printf("%d %d %d", a_b,b_c,c_a);

return(0);
}

#include<stdio.h>
int main()
{
    long long a,b,c,x,y,z;
    scanf("%lld%lld%lld",&a,&b,&c);
    if((a+b+c)%2==0)
    {
        x=(a+b-c)/2;
        y=(b+c-a)/2;
        z=(c+a-b)/2;
        if(x>=0 && y>=0 && z>=0)
        printf("%lld %lld %lld\n",x,y,z);
        else
        printf("Impossible\n");
    }
        else
        printf("Impossible\n");
        return 0;
}

//molecules.c
#include<stdio.h>
#include<limits.h>
int func(int a,int b,int max)
{
    int count=0;
    int sum=a+b;
    while(1)
    {
            if(sum==max)
            break;
            else
            {
                count++;
                sum-=2;
                if(sum<max)
                {

                    printf("Impossible\n");
                    return ;
                }

            }
    }
    return count;

}
int main()
{
    int a[3];
    int b[3]={0};
    int i,sum=0,max=INT_MIN,sumleft;
    int index;
    for(i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
        sum+=a[i];
        if(max<a[i])
        {
            max=a[i];
            index=i;
        }

    }
    sumleft=sum-max;
    if(sum%2==1|| sumleft<max)
    {
        printf("Impossible\n");
    }
    else
    {
    int one,two,id;
        switch(index)
        {

            case 0 :
                    one=a[1];
                    two=a[2];
                  id= func(one,two,max);
                  printf("%d %d %d\n",a[1]-id,id,a[2]-id);
                  break;

            case 1: one=a[0];
                    two=a[2];
                    id= func(one,two,max);
                    printf("%d %d %d\n",a[0]-id,a[2]-id,id);
                  break;
            case 2: one=a[0];
                    two=a[1];
                    id= func(one,two,max);
                  printf("%d %d %d\n",id,a[1]-id,a[0]-id);
                  break;
        }
    }
    return 0;

}

#include<stdio.h>
int main()
{
	int a,b,c,i,x,y,z,max,flag=0;
	scanf("%d %d %d",&a,&b,&c);
	if(a >= b && a >= c) max=a;
	if(b >= a && b >= c) max=b;
	if(c >= a && c >= b) max=c;
//	printf("max is %d\n",max);
	for(i=0;i<max;i++)
	{
	//printf("1 %d %d\n",b-1,a-1);
		x=i;
		y=b-i;
		z=a-i;
		if(y+z == c)
		{
			flag=1;
			break;
		}
	}
	if(x>=0 && y>=0 && z>=0 && flag==1)
		printf("%d %d %d\n",x,y,z);
	else
		printf("Impossible\n");
	return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a,b,c;

    scanf("%d %d %d",&a,&b,&c);

    int K = (a+b-c)/2;
    int K2 = (b+c-a)/2;
    if(K >= 0 && K2>= 0 && a- K >=0 && 2*(K + K2 + (a - K)) == (a + b + c))
    {
        printf("%d %d %d\n",K,K2,a-K);
    }
    else
    {
        printf("Impossible\n");
    }
    return 0;
}

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
    int a, b, c;
    int x, y, z;
    while(scanf("%d%d%d",&a, &b, &c) != EOF)
    {
       for(x = 0 ; x <= a; x++)
       {
           y = b -x;
           if(y < 0)
               continue;
           if(c - y == a -x)
           {
               z = c - y;
               if(z < 0)
                   continue;
               break;
           }
       }
        if(x > a)
            printf("Impossible\n");
        else
            printf("%d %d %d\n", x, y, z);
    }
    return 0;
}

#include<stdio.h>
int main(){
int va,vb,vc,nab,nbc,nca;
scanf("%d %d %d",&va,&vb,&vc);
nab=(va+vb-vc)/2;
nbc=(vb+vc-va)/2;
nca=(vc+va-vb)/2;
if((va+vb+vc)%2!=0)
printf("Impossible\n");
else if(nab<0||nbc<0||nca<0)
printf("Impossible\n");
else if(nab==0&&nbc==0||nbc==0&&nca==0||nca==0&&nab==0)
printf("Impossible\n");
else
printf("%d %d %d\n",nab,nbc,nca);
return 0;
}

#include<stdio.h>
int main()
{
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        int a,b,c;
        a = (x+y-z)/2;
        b = (x+z-y)/2;
        c = (y+z-x)/2;
        if (a*b*c < 0 || (a==1 && b==1 && c==1))
                printf("Impossible");
        else
                printf("%d %d %d",a,b,c);
        return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int n1, n2, n3;
	scanf("%d%d%d", &n1, &n2, &n3);
	int b12=(n1+n2-n3)/2;
	if(b12<0)
		printf("Impossible\n");
	else
		printf("%d %d %d\n", b12, n2-b12, n1-b12);

	return 0;
}

#include <stdio.h>
int main()
{
int a[3],n[3],i,k,sum=0,c=0;
for(i=0;i<3;i++)
{
scanf("%d",&a[i]);
sum=sum+a[i];
}
sum=sum/2;
for(i=1;i<3;i++)
{
n[i]=sum-a[i-1];
}
n[0]=sum-a[2];
for(i=0;i<3;i++)
{
if(n[i]>a[i])
{printf("Impossible");
return 0;}
if(n[i]==0)
	c++;

}
if(c==3)
	{printf("Impossible");
return 0;}
for(i=0;i<3;i++)
printf("%d ",n[i]);

return 0;

}

#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 15
int main()
{
    int a,b,c,x,y,z;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF)
    {
        x=a+b-c;
    y=b+c-a;
    z=a+c-b;
    if(x%2==0&&y%2==0&&z%2==0&&x>=0&&y>=0&&z>=0)
        printf("%d %d %d\n",x/2,y/2,z/2);
    else
        printf("Impossib\n");
    }
    return 0;
}

#include<stdio.h>
int main()
{
	int a,b,c,x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	int res1=b-c+a;
	int res2=b-a+c;
	int res3=a-b+c;
	x=res1/2;
	y=res2/2;
	z=res3/2;
	int count=0;
	if(x==0)count++;
	if(y==0)count++;
	if(z==0)count++;
	int x1=res1%2;
	int y1=res2%2;
	int z1=res3%3;
	int flag=0;
	if(x<0 || y<0 || z<0)
	{
		flag=1;
	}
	if(count>1)
		flag=1;
	//if(x1!=0 || y1!=0 || z1!=0)
	//	printf("Impossible");
	if(flag==0)
		printf("%d %d %d",x,y,z);
	else
		printf("Impossible");
	return 0;
}

#include<stdio.h>
int main()
{
	int a,b,c;
	float x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	x=(a+b-c)/2;
	y=(b+c-a)/2;
	z=(c+a-b)/2;
	if(x!=(int)x||y!=(int)y||z!=(int)z||x<0||y<0||z<0)
	{
		printf("Impossible\n");
	}
	else
	{
		printf("%d %d %d\n",(int)x,(int)y,(int)z);
	}
	return 0;

}

#include<stdio.h>
int main()
{
    long long a,b,c,x,y,z;
    scanf("%lld%lld%lld",&a,&b,&c);
    if((a+b+c)%2==0)
    {
        x=(a+b-c)/2;
        y=(b+c-a)/2;
        z=(c+a-b)/2;
        if(x>=0 && y>=0 && z>=0)
        printf("%lld %lld %lld\n",x,y,z);
        else
        printf("impossible\n");
    }
        else
        printf("impossible\n");
        return 0;
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num[3];
    int num_r[3];
    int i,j,k,t;
    for(i = 0;i < 3;i++)
    {
        scanf("%d",&num[i]);
    }
    for(i = 0;i <= num[0];i++)
    {
        j = num[1] - i;
        k = num[2] - j;
        if(num[0] == i + k && num[1] == j + i && num[2] == j + k)
        {
            if(i < 0 || j < 0 || k < 0)
            {
                printf("Impossible");
                return 0;
            }
            if(i == 0 && j == 0 || i == 0 && k == 0 || j == 0 && k == 0)
            {
                printf("Impossible");
                return 0;
            }
            num_r[0] = i;
            num_r[1] = j;
            num_r[2] = k;
            for(i = 0; i < 3; i++)
            {
                if(i == 0);
                else
                    printf(" ");
                printf("%d",num_r[i]);
                t = 1;
            }
        }
    }
    if(t != 1)
    {
        printf("Impossible");
    }

    return 0;
}

/* Problem: 344B - Simple Molecules */
/* Solver: Gusztav Szmolik */

#include <stdio.h>

int main ()
    {
    unsigned int a;
    unsigned int b;
    unsigned int c;
    unsigned short sol;
    unsigned int d;
    unsigned int r;
    unsigned int mbc;

    if (scanf("%u %u %u",&a,&b,&c) != 3)
        return -1;
    if (a < 1 || a > 1000000 || b < 1 || b > 1000000 || c < 1 || c > 1000000)
        return -1;
    sol = 1;
    d = (b > c ? b-c : c-b);
    if (a < d)
        sol = 0;
    else
        {
        r = a-d;
        mbc = (b > c ? c : b);
        if (r%2 || 2*mbc < a)
            sol = 0;
        }
    if (sol)
        {
        printf ("%u ",(b == mbc ? r/2 : r/2+d));
        printf ("%u ",mbc-r/2);
        printf ("%u\n",(b == mbc ? r/2+d : r/2));
        }
    else
        printf ("Impossible\n");
    return 0;
    }

#include <stdio.h>
#include <math.h>

int main(){
int a,b,c, semisuma, a_b, b_c, c_a;
scanf("%d %d %d", &a,&b,&c);
semisuma=(a+b+c)/2;

b_c=semisuma-a;
a_b=semisuma-c;
c_a=semisuma-b;

if (semisuma%2) printf("Impossible");
else printf("%d %d %d", a_b,b_c,c_a);

return(0);
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num[3];
    int num_r[3];
    int i,j,k,t;
    for(i = 0;i < 3;i++)
    {
        scanf("%d",&num[i]);
    }
    for(i = 0;i < num[0];i++)
    {
        j = num[1] - i;
        k = num[2] - j;
        if(num[0] == i + k && num[1] == j + i && num[2] == j + k)
        {
            if(i < 0 || j < 0 || k < 0)
            {
                printf("Impossible");
                return 0;
            }
            if(i == 0 && j == 0 || i == 0 && k == 0 || j == 0 && k == 0)
            {
                printf("Impossible");
                return 0;
            }
            num_r[0] = i;
            num_r[1] = j;
            num_r[2] = k;
            for(i = 0; i < 3; i++)
            {
                if(i == 0);
                else
                    printf(" ");
                printf("%d",num_r[i]);
                t = 1;
            }
        }
    }
    if(t != 1)
    {
        printf("Impossible");
    }

    return 0;
}

#include <stdio.h>
int main()
{
	int a,b,c,x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	x=(a+b-c)/2;
	y=(b+c-a)/2;
	z=(a+c-b)/2;
	if(x>=0&&y>=0&&z>=0)
	printf("%d %d %d",x,y,z);
	else
	printf("Impossible");
	return 0;
 }

#include<stdio.h>
int main()
{
    long long int a,b,c,d,i,j;
    scanf("%lld%lld%lld",&a,&b,&c);
    if((a+b)%c==0 || (b+c)%a==0 || (c+a)%b==0)
    {
        printf("0 1 1\n");
    }
    else printf("Impossible\n");
    return 0;
}

#include <stdio.h>
int main()
{
int a[3],n[3],i,k,sum=0;
for(i=0;i<3;i++)
{
scanf("%d",&a[i]);
sum=sum+a[i];
}
sum=sum/2;
for(i=1;i<3;i++)
{
n[i]=sum-a[i-1];
}
n[0]=sum-a[2];
for(i=0;i<3;i++)
{
if(n[i]>a[i])
{printf("Impossible");
return 0;}

}

for(i=0;i<3;i++)
printf("%d ",n[i]);

return 0;

}

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
	int a,b,c,x,y,z;
	scanf("%d%d%d",&a,&b,&c);
	x=(a+b+c)/2-c;
	y=(a+b+c)/2-a;
	z=(a+b+c)/2-b;
	if(x<0 || y<0 || z<0) printf("Impossible\n");
	else printf("%d %d %d\n",x,y,z);
	return 0;
}

#include<stdio.h>
int main(){
    int a,b,c,d;
    scanf("%d%d%d",&a,&b,&c); int order;
    if(a==0 || b==0 || c==0){
    printf("Impossible");
    return 0;
    }
    int max=a;
    order=1;
    if(b>max){
        max=b; order=2;}
    if(c>max){
        max=c; order=3;}
    int i;
    for(i=0;i<=max;i++){
    if(order==1 && (b-i)==(c-(max-i)) && (b-i)>=0){
    printf("%d %d %d",i,b-i,max-i);
    return 0;
    }
    if(order==1 && (c-i)==(b-(max-i)) && (c-i)>=0){
    printf("%d %d %d",max-i,b-i,i);
    return 0;
    }
    if(order==2 && (a-i)==(c-(max-i)) && (a-i)>=0){
    printf("%d %d %d",i,max-i,a-i);
    return 0;
    }
    if(order==2 && (c-i)==(a-(max-i)) && (c-i)>=0){
    printf("%d %d %d",max-i,i,c-i);
    return 0;
    }
    if(order==3 && (a-i)==(b-(max-i)) && (a-i)>=0){
    printf("%d %d %d",a-i,max-i,i);
    return 0;
    }
    if(order==3 && (b-i)==(a-(max-i)) && (b-i)>=0){
    printf("%d %d %d",a-i,i,max-i);
    return 0;
    }
    }
    printf("Impossible");

}

#include<stdio.h>
int main()
{
	int a[3],i,j,temp,p,q,r,flag,num;
	for(i=0;i<3;i++)
	{
		scanf("%d",&a[i]);
	}
	num=a[0];
	flag=0;
	while(num>=0&&flag==0)
	{
		p=num;
		q=a[1]-num;
		r=a[0]-num;
		if(q+r==a[2])
		{
			flag=1;
			printf("%d %d %d\n",p,q,r);
		}
		num--;
	}
	if(flag==0)
	{
		printf("Impossible\n");
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c;
    int one_two = 0, one_three = 0, two_three = 0;
    scanf("%d %d %d", &a, &b, &c);
    if(a+b<c || a+c < b || b+c < a){
        printf("Impossible\n");
    }
    else{
        one_three = (a+c-b)/2;
        one_two = a-one_three;
        two_three = b - one_two;
        printf("%d %d %d\n", one_two, two_three, one_three);
    }
    return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a,b,c;

    scanf("%d %d %d",&a,&b,&c);

    int K = (a+b-c)/2;
    int K2 = (b+c-a)/2;
    if(K >= 0 && K2>= 0 && 2*(K + K2 + (a - K)) == (a + b + c))
    {
        printf("%d %d %d\n",K,K2,a-K);
    }
    else
    {
        printf("Impossible\n");
    }
    return 0;
}

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	if(a>b+c || b>c+a || c>a+b)
		printf("Impossible");
	else
		printf("%d %d %d",(a+b-c)/2,(b+c-a)/2,(a+c-b)/2);
	return 0;
}

#include <stdio.h>

int main() {
	int a, b, c, x, y, z;

	scanf("%d%d%d", &a, &b, &c);
	x = (a + b - c) / 2;
	y = (c + a - b) / 2;
	z = (b + c - a) / 2;
	if ((a + b + c) % 2 != 0 || x < 0 || y < 0 || z < 0)
		printf("Impossible\n");
	else
		printf("%d %d %d\n", z, y, x);
	return 0;
}

#include <stdio.h>

int main()
{

	int a, b, c;
	int x, y, z, sum;

	scanf("%d%d%d", &a, &b, &c);
	sum = a + b + c;

	if((sum & 1) == 1)
	{
		puts("Impossible");
		return 0;
	}
	y = (a - b + c) / 2;
	x = a - y;
	z = c - y;
	if(x <= 0 || y <= 0 || z <= 0)
	{
		puts("Impossible");
	}
	else
	{
		printf("%d %d %d\n",x, z, y);
	}
	return 0;
}

#include<stdio.h>
int main()
{
    int a,b,c,A,B,C;
    scanf("%d %d %d", &a,&b,&c);
    if (a<b+c && b<a+c && c<a+b)
        {
            for(A=1;A<=a;A++)
            {
                C=a-A;
                B=((a+b+c)/2)-(A+C);
                if(A+B+C==((a+b+c)/2) && b==A+B && c==B+C)
                    printf("%d %d %d",A,B,C);
                    break;
            }
        }
    else if (a>b+c || b>a+c || c>a+b)
        printf("Impossible");
    else if (a==b+c)
        printf("%d %d %d", b,a-(b+c),c);
    else if (b==a+c)
        printf("%d %d %d", a,c,b-(a+c));
    else if (c==a+b)
        printf("%d %d %d", c-(a+b),b,a);

}

#include <stdio.h>

#define min(a, b) ((a) < (b) ? (a):(b))

int main(void){
  int x, a, b, c;
  scanf("%d%d%d", &a, &b, &c);
  int limit = min(a, min(b, c));
  for(x = 0; x <= limit; x++){
    if(b-a + 2*x == c){
      printf("%d %d %d\n", a-x, b+x-a, x);
      break;
    }
  }
  if(x == limit+1) printf("Impossible\n");
  return 0;
}

#include<stdio.h>

int main(void){
  int a,b,c,i,flg,S,ans[3]={0};
  scanf("%d %d %d",&a,&b,&c);
  S=a+b+c;
  flg=0;
  if(S%2) puts("Impossible");
  else{
    S/=2;
    ans[0]=S-a;
    ans[1]=S-b;
    ans[2]=S-c;
    for(i=0;i<3;i++){
      if(ans[i]<0){
	puts("Impossible");
	flg=1;
	break;
      }
    }
    if(!flg) printf("%d %d %d\n",ans[0],ans[1],ans[2]);
  }
  return 0;
}

#include <stdio.h>

int max3 (int a, int b, int c);

int main ()
{
    int b, c, d, e, i, j, g, temp, total;
    scanf ("%d", &c);
    scanf ("%d", &d);
    scanf ("%d", &e);
    total = (c + d + e) / 2;
    b = max3(c, d, e);
    if ((2*b - c - d - e) > 0 )
    {
        printf ("Imposible\n");
    }
    else
    {
        printf ("%d %d %d\n", (total - e), (total - c), (total - d));
    }
return 0;
}
int max3 (int c, int d, int e)
{
    if (c > d)
    {
        if ( c > e)
        {
            return c;
        }
        else
        {
            return e;
        }
    }
    else
    {
        if (d > e)
        {
            return d;
        }
        else
        {
            return e;
        }
    }
}

#include <stdio.h>
int main() {
    int a,b,c,x,m,arr[3],i,j,y;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b+c||b>a+c||c>a+b){
        printf("Impossible\n");
        return 0;
    }
    arr[0]=a;arr[1]=b;arr[2]=c;
    for(i=1;i<=2;i++)
        for(j=0;j<=2-i;j++)
        {

    if(arr[j+1]<arr[j])
        {
        x=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=x;
        }
    }
    x=(arr[1]+arr[0]-arr[2]);
    y=x/2;
    //printf("%d\n",y);
    if(x%2!=0||arr[1]+arr[0]-2*y!=arr[2]){
        printf("Impossible\n");
        return 0;
    }
    if(arr[2]==c){
        printf("%d %d %d\n",y,arr[1]-y,arr[0]-y);
    }
    else if(arr[2]==a){
        printf("%d %d %d\n",b-y,y,c-y);
    }
    else if(arr[2]==b){
        printf("%d %d %d\n",a-y,c-y,y);
    }
    return 0;

}

#include<stdio.h>
int main()
{
    long long int a,b,c=0,s=0,n,m,l;
    scanf("%lld%lld%lld",&n,&m,&l);
    s=(n+m+l)/(2.0);
    c=s-n;
    a=s-m;
    b=s-l;
    if(c>=0 && a>=0 && b>=0 && !(a+b==0 || b+c==0 || c+a==0))
        printf("%lld %lld %lld",b,c,a);
    else
        printf("Impossible");
    return 0;
}

#include <stdio.h>

int main() {
	int a, b, c, x, y, z;

	scanf("%d%d%d", &a, &b, &c);
	x = (a + b - c) / 2;
	y = (c + a - b) / 2;
	z = (b + c - a) / 2;
	if ((a + b + c) % 2 != 0 || x < 0 || y < 0 || z < 0)
		printf("Impossible\n");
	else
		printf("%d %d %d\n", x, y, z);
	return 0;
}

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	int x,y,z;
	x=(b+c-a)/2;
	y=(a+c-b)/2;
	z=(a+b-c)/2;
	if(a+b-c>=0&&b+c-a>=0&&a+c-b>=0)
	printf("%d %d %d",z,x,y);
	else
		printf("Impossible");
return 0;
}

#include<stdio.h>
int main(){
    int a,b,c,d;
    scanf("%d%d%d",&a,&b,&c); int order;
    if(a==0 || b==0 || c==0){
    printf("Impossible");
    return 0;
    }
    int max=a;
    order=1;
    if(b>max){
        max=b; order=2;}
    if(c>max){
        max=c; order=3;}
    int i;
    for(i=0;i<=max;i++){
    if(order==1 && (b-i)==(c-(max-i)) && (b-i)>=0){
    printf("%d %d %d",i,b-i,max-i);
    return 0;
    }
    if(order==1 && (c-i)==(b-(max-i)) && (c-i)>=0){
    printf("%d %d %d",max-i,b-i,i);
    return 0;
    }
    if(order==2 && (a-i)==(c-(max-i)) && (a-i)>=0){
    printf("%d %d %d",i,max-i,a-i);
    return 0;
    }
    if(order==2 && (c-i)==(a-(max-i)) && (c-i)>=0){
    printf("%d %d %d",a-i,max-i,i);
    return 0;
    }
    if(order==3 && (a-i)==(b-(max-i)) && (a-i)>=0){
    printf("%d %d %d",a-i,max-i,i);
    return 0;
    }
    if(order==3 && (b-i)==(a-(max-i)) && (b-i)>=0){
    printf("%d %d %d",i,max-i,a-i);
    return 0;
    }
    }
    printf("Impossible");

}

#include<stdio.h>
int main()
{
	int a,b,c;
	int x,y,z;

	int sum = 0;

	scanf("%d%d%d",&a,&b,&c);

	sum = (a + b + c)/2;

	if(sum % 2 != 0 || sum - a  < 0 || sum - b < 0 || sum - c < 0)
	{
		printf("Impossible\n");
	}
	else
	{
		printf("%d %d %d\n",sum-c,sum-a,sum-b);
	}

	return 0;
}

#include <stdio.h>
#include <math.h>

int main(){
int a,b,c, semisuma, a_b, b_c, c_a;
scanf("%d %d %d", &a,&b,&c);
semisuma=(a+b+c)/2;

b_c=semisuma-a;
a_b=semisuma-c;
c_a=semisuma-b;

if (semisuma%2) printf("Impossible");
else printf("%d %d %d", a_b,b_c,c_a);

return(0);
}

#include <stdio.h>
#include <conio.h>

int a,b,c,maxe;
int s,t,i,check;
int main()
{

    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%d",&c);

    if(a>=b)
    {
        if(c>=a)
        {
            maxe=c;
            molecule(a,b,maxe);

        }
        else
            {
            maxe=a;
            molecule(b,c,maxe);
            }
    }
    else if(b>=a)
        {
            if(c>=b)
            {

            maxe=c;
        molecule(a,b,maxe);
        }
        else
        {
            maxe=b;
            molecule(a,c,maxe);
        }
           }
           return 0;
}
    molecule(int u,int v,int muxe)
    {
  check=1;
    for(i=0;i<=(muxe/2);i++)
    {

        s=u-i;
        t=v-(muxe-i);
        if(s==t)
        {
          if(i>=0&&(muxe-i)>=0&&s>=0){
          out(i,muxe-i,s);
          check=0;
          }
        }

    }
    if(check)
        printf("Impossible");
    }
   int out(int x,int y,int z)
    {

       if(a>=b)
    {
        if(c>=a)
        {
            maxe=c;
            printf("%d ",z);
            printf("%d ",y);
            printf("%d ",x);
        }
        else
            {
            maxe=a;
            printf("%d ",x);
            printf("%d ",z);
            printf("%d ",y);

            }
    }
   else if(b>=a)
           {

               if(c>=b)
            {

            maxe=c;
            printf("%d ",z);
            printf("%d ",y);
            printf("%d ",x);
        }
        else
        {
            maxe=b;
            printf("%d ",x);
            printf("%d ",y);
            printf("%d ",z);
        }
           }
           return 0;
           }

#include <stdio.h>
int main()
{
int a[3],n[3],i,k,sum=0;
for(i=0;i<3;i++)
{
scanf("%d",&a[i]);
sum=sum+a[i];
}
sum=sum/2;
for(i=1;i<3;i++)
{
n[i]=sum-a[i-1];
}
n[0]=sum-a[2];
for(i=0;i<3;i++)
{
if(n[i]>a[i])
{printf("Impossible");
return 0;}

}

for(i=0;i<3;i++)
printf("%d ",n[i]);

return 0;

}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long long int a , b , c , counter , diff1 , diff2 , temp ;
    int flag1 = 0 , flag2 = 0;
    scanf("%I64d %I64d %I64d",&a ,&b,&c);
    if ( b > c){
        temp = b;
        b = c ;
        c = temp ;
        flag1 ++;
    }
    if ( a > c){
        temp = a ;
        a = c;
        c = temp;
        flag2 ++ ;
    }
    for (counter = 0 ; counter <= c ; counter ++){
        if ( (a - counter) == (b - (c - counter)) && a >= counter && b >= (c - counter) ){
                if (flag1 == 0 && flag2 == 0){
                    printf("%I64d %I64d %I64d", a - counter , c - counter , counter);
                    return 0;
                }
                if ( flag1 == 1 && flag2 == 0){
                    printf("%I64d %I64d %I64d", counter , c - counter   ,a - counter);
                    return 0;
                }
                if (flag1 == 1 && flag2 == 1){
                    printf("%I64d %I64d %I64d",c - counter , counter , a - counter );
                    return 0;
                }
                if (flag2 == 1 && flag1 == 0){
                    printf("%I64d %I64d %I64d",c - counter, a - counter , counter);
                    return 0;
                }
        }
        else if ( (b - counter) == (a - (c - counter)) && a>= (c - counter) && (b >= counter )){
                if (flag1 == 0 && flag2 == 0){
                       printf("%I64d %I64d %I64d" , b - counter , counter , c - counter);
                       return 0;
                    }
                if (flag1 == 1){
                        printf("%I64d %I64d %I64d" ,c - counter , b - counter , counter  );
                        return 0;
                    }
                if ( flag1 == 1 && flag2 == 2){
                        printf("%I64d %I64d %I64d" ,counter ,c - counter , b - counter );
                        return 0;
                    }
                if (flag2 == 1 && flag1 == 0){
                       printf("%I64d %I64d %I64d" ,counter , b - counter ,  c - counter);
                       return 0;
                }
        }
    }
    printf("Impossible");
    return 0;
}

/*Codeforces Round #200 (Div. 2)    B. Simple Molecules*/
#include <stdio.h>
int Max(int a[],int n);
int Min(int a[],int n);
int main()
{
    int a[4],x,y,z,i,max,min;
    for (i=1;i<=3;i++)
        scanf ("%d",&a[i]);
    max=Max(a,3);
    min=Min(a,3)-1;
    i=0;
    for (x=min/3;x<max&&i==0;x++)
    {
        y=a[2]-x;
        z=a[1]-x;
        if (z+y==a[3]&&y>=0&&z>=0)
        {
            printf ("%d %d %d\n",x,y,z);
            i=1;
        }
    }
    if (i==0)
        printf ("Impossible\n");
    return 0;
}
int Max(int a[],int n)
{
    int max=a[1],i;
    for (i=2;i<=n;i++)
    {
        if (max<a[i])
            max=a[i];
    }
    return max;
}
int Min(int a[],int n)
{
    int min=a[1],i;
    for (i=2;i<=n;i++)
    {
        if (min>a[i])
            min=a[i];
    }
    return min;
}

#include<stdio.h>
int main()
{
	int a,b,c,x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	int res1=b-c+a;
	int res2=b-a+c;
	int res3=a-b+c;
	x=res1/2;
	y=res2/2;
	z=res3/2;
	int x1=res1%2;
	int y1=res2%2;
	int z1=res3%3;
	int flag=0;
	if(x<0 || y<0 || z<0)
	{
		printf("Impossible");
		flag=1;
	}
	//if(x1!=0 || y1!=0 || z1!=0)
	//	printf("Impossible");
	if(flag==0)
		printf("%d %d %d",x,y,z);
	return 0;
}

/*  AUTHOR:AKASH JAIN
*   USERNAME:akash19jain
*   DATE:14/10/2019
*/
// #include<algorithm>
// #include <bits/stdc++.h>
// using namespace std;

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<stdbool.h>
#include<ctype.h>
#define SC1(x)          scanf("%lld",&x)
#define SC2(x,y)        scanf("%lld%lld",&x,&y)
#define SC3(x,y,z)      scanf("%lld%lld%lld",&x,&y,&z)
#define SCS(x)          scanf("\n%s", x)
#define PF1(x)          printf("%lld\n",x)
#define PF2(x,y)        printf("%lld %lld\n",x,y)
#define PF3(x,y,z)      printf("%lld %lld %lld\n",x,y,z)
#define PFN                printf("\n")
#define REP(i,n)        for(long long i=0;i<(n);i++)
#define FOR(i,a,b)      for(long long i=(a);i<=(b);i++)
#define FORD(i,a,b)     for(long long i=(a);i>=(b);i--)
#define WHILE(n)        while(n--)
#define MEM(a, b)       memset(a, (b), sizeof(a))
#define ITOC(c)         ((char)(((ll)'0')+c))
#define MID(s,e)        (s+(e-s)/2)
#define SZ(a)            strlen(a)
#define MOD             1000000007
#define MAX             10000000005
#define MIN             -10000000005
#define PI              3.1415926535897932384626433832795
#define DEB(x)          printf("The value of \"%s\" is: %d\n",#x,x)
#define CASES           ll t;SC1(t);while(t--)
#define ABS(a)          ((a>0)?a:-(a))
#define SWAP(a,b)        ll z=a;a=b;b=z
#define SWAPC(a,b)        char z=a;a=b;b=z

const int INF = 1<<29;
typedef long long ll;
typedef unsigned long long ull;
#define FILEIO(name) \  freopen(name".in", "r", stdin); \   freopen(name".out", "w", stdout);
int cmp(const void * a,const void * b);
long long maxv(long long a,long long b);
long long minv(long long a,long long b);
long long gcd(long long u,long long v);
long long digits(long long n);
bool isPoweroftwo(long long n);

int main()
{
    ll a,b,c;
    SC3(a,b,c);
    if((a+b+c)%2!=0)
    {
        printf("Impossible\n");
        return 0;
    }
    PF3((b+c-a)/2,(c+a-b)/2,(b+a-c)/2);
    return 0;
}

//qsort(arr,n,sizeof(arr[0]),cmp);
int cmp (const void * a, const void * b)
{
    if( *(ll*)a - *(ll*)b < 0 ) return -1;
    if( *(ll*)a - *(ll*)b > 0 ) return 1;
        return 0;
}
long long maxv(long long a,long long b)
{
    if(a>b) return a;
        return b;
}
long long minv(long long a,long long b)
{
    if(a<b) return a;
        return b;
}
long long gcd(long long u,long long v)
{
    if (v == 0) return u;
       return gcd(v, u%v);
}
long long digits(long long n)    //to calculate no of digits in a number
{
    return floor(log10(n))+1;
}
bool isPoweroftwo(long long x)
{
    return x && (!(x&(x-1)));
}

#include<stdio.h>
int main(){
int a1,a2,a0,x,y,z;
scanf("%d",&a0);

scanf("%d",&a1);
scanf("%d",&a2);
x=(a0-a2+a1)/2;
y=(a1-a0+a2)/2;
z=(a2-a1+a0)/2;
if(x==0 && y==0 && z==0)

printf("Impossible\n");
else if(x>=0 && y>=0 && z>=0)
printf("%d %d %d\n",x,y,z );
else
printf("Impossible\n");
return 0;
}

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
    int a, b, c;
    int max, min, mid;
    int i;
    while(scanf("%d%d%d",&a, &b, &c) != EOF)
    {
        max = min = a;
        if(b > max)
            max = b;
        if(c > max)
            max = c;
        if(b < min)
            min = b;
        if(c < min)
            min = c;
        mid = a + b + c - max - min;
        if((min + mid) < max)
        {
            printf("Impossible\n");
        }
        else
        {
            printf("%d %d %d\n", abs(a - b), abs(b - c), abs(c - a));
        }
    }
    return 0;
}

#include <stdio.h>

int main()
{
	int a,b,c,i;
	scanf("%d %d %d",&a,&b,&c);
	for(i=0;i<=a;++i)
	{
		if(b-i==c-a+i)
		{
			printf("%d %d %d\n",i,b-i,a-i);
			return 0;
		}
	}
	printf("Impossible\n");
	return 0;
}

#include<stdio.h>
int main()
{
    long long int a,b,c=0,s=0,n,m,l;
    scanf("%lld%lld%lld",&n,&m,&l);
    s=(n+m+l)/(2.0);
    c=s-n;
    a=s-m;
    b=s-l;
    if(c>=0 && a>=0 && b>=0)
        printf("%lld %lld %lld",b,c,a);
    else
        printf("Impossible");
    return 0;
}

#include<stdio.h>
#include<string.h>
int max(int a,int b,int c)
{
    if(a>=b && a>=c) return 1;
    else if(b>a && b>=c) return 2;
    else return 3;
}
int main()
{
    int a,b,c,i,s1=0,s2=0,s3=0,index;
    scanf("%d %d %d",&a,&b,&c);
    while(a>0 && b>0 && c>0)
    {
        if(a==1 && b==1 && c==1)
        { printf("Impossible\n");break;}
        index=max(a,b,c);
        if(index==1) { a=a-2; b--;c--;s1++;s2++;}
        else if(index==2) {b=b-2; a--;c--; s1++;s3++;}
        else { c=c-2;a--;b--; s2++;s3++;}
    }
    if(a==0)
    {
        if(b!=c) printf("Impossible\n");
        else printf("%d %d %d\n",s1,s2,s3+b);
    }
    else if(b==0)
    {
        if(a!=c) printf("Impossible\n");
        else printf("%d %d %d\n",s1,s2+a,s3);

    }
    else if(c==0)
    {
        if(a!=b) printf("Impossible\n");
        else printf("%d %d %d\n",s1+a,s2,s3);
    }
    return 0;
}

#include <stdio.h>

#define min(a, b) ((a) < (b) ? (a):(b))

int main(void){
  int x, a, b, c;
  scanf("%d%d%d", &a, &b, &c);
  int limit = min(a, min(b, c));
  for(x = 0; x <= limit; x++){
    if(b-a + 2*x == c){
      printf("%d %d %d\n", a-x, b+x-a, x);
      break;
    }
  }
  if(x == limit+1) printf("Imposible\n");
  return 0;
}

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	long long int x,y,z;

	x=(a+b-c)/2;
	y=(b+c-a)/2;
	z=(a+c-b)/2;

	if(x>=0 && y>=0 && z>=0)
		printf("%lld %lld %lld\n",x,y,z);
	else
		printf("Impossible\n");
	return 0;
}

//molecules.c
#include<stdio.h>
#include<limits.h>
int func(int a,int b,int max)
{
    int count=0;
    int sum=a+b;
    while(1)
    {
            if(sum==max)
            break;
            else
            {
                count++;
                sum-=2*count;
                if(sum<max)
                {
                    printf("Impossible\n");
                    return ;
                }

            }
    }
    return count;

}
int main()
{
    int a[3];
    int b[3]={0};
    int i,sum=0,max=INT_MIN,sumleft;
    int index;
    for(i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
        sum+=a[i];
        if(max<a[i])
        {
            max=a[i];
            index=i;
        }

    }
    sumleft=sum-max;
    if(sum%2==1|| sumleft<max)
    {
        printf("Impossible\n");
    }
    else
    {
    int one,two,id;
        switch(index)
        {

            case 0 :
                    one=a[1];
                    two=a[2];
                  id= func(one,two,max);
                  printf("%d %d %d\n",a[1]-id,id,a[2]-id);
                  break;

            case 1: one=a[0];
                    two=a[2];
                    id= func(one,two,max);
                    printf("%d %d %d\n",a[0]-id,a[2]-id,id);
                  break;
            case 2: one=a[0];
                    two=a[1];
                    id= func(one,two,max);
                  printf("%d %d %d\n",id,a[1]-id,a[0]-id);
                  break;
        }
    }
    return 0;

}

#include <stdio.h>
int main(){
	int a, b, c;
	int x, y, z;
	int i;
	scanf("%d %d %d", &a, &b, &c);
	if(a>=b&&c>=b){
		x=b;
		y=0;
		z=0;
		for(i=1; i<=b; i++){
			y++;
			z++;
			x--;
			if(x==0)
				break;
			if((a-x)==(c-y)){
				printf("%d %d %d\n", x, y, a-x);
				return 0;
			}
		}
		printf("Impossible\n");
	}else if(c>=a&&b>=a){
		x=a;
		y=0;
		z=0;
		for(i=1; i<=a; i++){
			y++;
			z++;
			x--;
			if(x==0)
				break;
			if((b-x)==(c-z)){
				printf("%d %d %d\n", x, b-x, z);
				return 0;
			}
		}
		printf("Impossible\n");
	}else{
		x=0;
		y=c;
		z=0;
		for(i=1; i<=c; i++){
			y--;
			z++;
			x++;
			if (y==0)
				break;
			if((a-z)==(b-y)){
				printf("%d %d %d\n", a-z, y, z);
				return 0;
			}
		}
		printf("Impossible\n");
	}
	return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a,b,c;

    scanf("%d %d %d",&a,&b,&c);

    int K = (a+b-c)/2;
    int K2 = (b+c-a)/2;
    if(K >= 0 && K2>= 0 && 2*(K + K2 + (a - K)) == (a + b + c))
    {
        printf("%d %d %d\n",K,K2,a-K);
    }
    else
    {
        printf("Impossible\n");
    }
    return 0;
}

#include<stdio.h>
#include<stdlib.h>

int main()
{
    int a, b, c, i, j, k=0, aray[3], mx, mn, md;
    scanf("%d %d %d", &a, &b, &c);
    if(a==b && b==c){
        printf("Impossible");
        return 0;
    }
    else if(a+b==c){
        printf("%d %d %d", 0, b, a);
    }
    else if(b+c==a){
        printf("%d %d %d", b, 0, c);
    }
    else if(c+a==b){
        printf("%d %d %d", a, c, 0);
    }
    else{
        aray[0]=a;
        aray[1]=b;
        aray[2]=c;
        for(i=1;i<3;i++){
            j=i;
            while(j>0 && aray[j]<aray[j-1]){
                aray[j]^=aray[j-1];
                aray[j-1]^=aray[j];
                aray[j]^=aray[j-1];
                j--;
            }
        }
        mx=aray[2];
        mn=aray[0];
        md=aray[1];
        if(mn+md<mx){
            printf("Impossible");
            return 0;
        }
        else{
            if(a+b>c){
                while(a+b!=c){
                    k++;
                    a--;
                    b--;
                    if(a+b<c){
                        break;
                    }
                }
                if(a+b==c){
                    printf("%d %d %d", k, b, a);
                }
                else{
                    printf("Impossible");
                }
            }
            else if(b+c>a){
                while(c+b!=a){
                    k++;
                    c--;
                    b--;
                    if(c+b<a){
                        break;
                    }
                }
                if(c+b==a){
                    printf("%d %d %d",b, k, c);
                }
                else{
                    printf("Impossible");
                }
            }
            else if(c+a>b){
                while(a+c!=b){
                    k++;
                    a--;
                    c--;
                    if(a+c<b){
                        break;
                    }
                }
                if(a+c==b){
                    printf("%d %d %d", a, c, k);
                }
                else{
                    printf("Impossible");
                }
            }
        }

    }

    return 0;
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num[3];
    int num_r[3];
    int i,j,k;
    for(i = 0;i < 3;i++)
    {
        scanf("%d",&num[i]);
    }
    for(i = 0;i < num[0];i++)
    {
        j = num[1] - i;
        k = num[2] - j;
        if(num[0] == i + k && num[1] == j + i && num[2] == j + k)
        {
            if(i < 0 || j < 0 || k < 0)
            {
                printf("Impossible");
                return 0;
            }
            if(i == 0 && j == 0 || i == 0 && k == 0 || j == 0 && k == 0)
            {
                printf("Impossible");
                return 0;
            }
            num_r[0] = i;
            num_r[1] = j;
            num_r[2] = k;
        }
    }
    for(i = 0; i < 3; i++)
    {
        printf("%3d",num_r[i]);
    }
    return 0;
}

#include<stdio.h>
main()
{
	int a,b,c,i,j,k,d;
	scanf("%d %d %d",&a,&b,&c);
	d=(a+b+c)/2;
	i=d-c;
	j=d-a;
	k=d-b;
	if(i<0 || j<0 ||k<0|| i+j+k !=d)
	printf("impossible");
	else
	printf("%d %d %d",i,j,k);
}

#include<stdio.h>
int main()
{
	int a,b,c;
	int x,y,z;

	int sum = 0;

	scanf("%d%d%d",&a,&b,&c);

	sum = (a + b + c)/2;

	if(sum - a  < 0 || sum - b < 0 || sum - c < 0)
	{
		printf("Impossible\n");
	}
	else
	{
		printf("%d %d %d\n",sum-c,sum-a,sum-b);
	}

	return 0;
}

#include <stdio.h>

int main() {
	int a, b, c, x, y, z;

	scanf("%d%d%d", &a, &b, &c);
	x = (a + b - c) / 2;
	y = (c + a - b) / 2;
	z = (b + c - a) / 2;
	if ((a + b + c) % 2 != 0 || x < 0 || y < 0 || z < 0)
		printf("Impossible\n");
	else
		printf("%d %d %d\n", z, y, x);
	return 0;
}

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int a,b,c;
	int x,y,z;
	scanf("%d %d %d",&a,&b,&c);
	if(abs(c-a-b)%2 == 0 && abs(b-c-a)%2 == 0 && abs(c-a-b)%2 == 0)
	{
		x = (c-a-b)/(-2);
		y = (b-c-a)/(-2);
		z = (a-b-c)/(-2);
		if(x > 0 && y > 0 && z > 0)
		{
			printf("%d %d %d\n",x,z,y);
		}
		else
		{
			printf("Impossible\n");
		}
	}
	else
	{
		printf("Impossible\n");
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, b, c;
    int one_two = 0, one_three = 0, two_three = 0;
    scanf("%d %d %d", &a, &b, &c);
    if(a+b<c || a+c < b || b+c < a){
        printf("Impossible\n");
    }
    else{
        one_three = (a+c-b)/2;
        one_two = a-one_three;
        two_three = b - one_two;
        printf("%d %d %d\n", one_two, two_three, one_three);
    }
    return 0;
}

#include <stdio.h>

int main(void) {
    int a,b,c,ans,i,j,x,y,z,max;
    scanf("%d %d %d",&a,&b,&c);
    if(a>b+c || b>a+c || c>a+b || (a+b+c)%2!=0)
    printf("Impossible");
    else
    {

        if(b>a && b>c)
        max=b;
        else if(a>b && a>c)
        max=a;
        else
        max=c;

        if(max==a)
        {
            y=(b+c-a)/2;
            x=b-y;
            z=c-y;
            printf("a");
        }
        else if(max==b)
        {
            z=(a+c-b)/2;
            x=a-z;
            y=c-z;
            printf("b");
        }
        else if(max==c)
        {
            x=(a+b-c)/2;
            z=a-x;
            y=b-x;
            printf("c");
        }
        printf("%d %d %d",x,y,z);
    }
    return 0;
}

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num[3];
    int num_r[3];
    int i,j,k,t;
    for(i = 0;i < 3;i++)
    {
        scanf("%d",&num[i]);
    }
    for(i = 0;i < num[0];i++)
    {
        j = num[1] - i;
        k = num[2] - j;
        if(num[0] == i + k && num[1] == j + i && num[2] == j + k)
        {
            if(i < 0 || j < 0 || k < 0)
            {
                printf("Impossible");
                return 0;
            }
            if(i == 0 && j == 0 || i == 0 && k == 0 || j == 0 && k == 0)
            {
                printf("Impossible");
                return 0;
            }
            num_r[0] = i;
            num_r[1] = j;
            num_r[2] = k;
            for(i = 0; i < 3; i++)
            {
                printf("%3d",num_r[i]);
                t = 1;
            }
        }
    }
    if(t != 1)
    {
        printf("Impossible");
    }

    return 0;
}

#include <stdio.h>
#include <conio.h>

int a,b,c,maxe;
int s,t,i,check;
int main()
{

    scanf("%d",&a);
    scanf("%d",&b);
    scanf("%d",&c);

    if(a>=b)
    {
        if(c>=a)
        {
            maxe=c;
            molecule(a,b,maxe);

        }
        else
            {
            maxe=a;
            molecule(b,c,maxe);
            }
    }
    else if(b>=a)
        {
            if(c>=b)
            {

            maxe=c;
        molecule(a,b,maxe);
        }
        else
        {
            maxe=b;
            molecule(a,c,maxe);
        }
           }
           return 0;
}
    molecule(int u,int v,int muxe)
    {
  check=1;
    for(i=0;i<=(muxe/2);i++)
    {

        s=u-i;
        t=v-(muxe-i);
        if(s==t)
        {
          if(i>=0&&(muxe-i)>=0&&s>=0){
          out(i,muxe-i,s);
          check=0;
          }
        }

    }
    if(check)
        printf("Impossible");
    }
   int out(int x,int y,int z)
    {

       if(a>=b)
    {
        if(c>=a)
        {
            maxe=c;
            printf("%d ",z);
            printf("%d ",y);
            printf("%d ",x);
        }
        else
            {
            maxe=a;
            printf("%d ",x);
            printf("%d ",z);
            printf("%d ",y);

            }
    }
   else if(b>=a)
           {

               if(c>=b)
            {

            maxe=c;
            printf("%d ",z);
            printf("%d ",y);
            printf("%d ",x);
        }
        else
        {
            maxe=b;
            printf("%d",x);
            printf("%d",y);
            printf("%d",z);
        }
           }
           return 0;
           }

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d%d%d",&a,&b,&c);
	if(a>b+c || b>c+a || c>a+b)
		printf("Impossible");
	else
		printf("%d %d %d",(a+b-c)/2,(b+c-a)/2,(a+c-b)/2);
	return 0;
}

#include <stdio.h>

int main()
{
	int a,b,c,i;
	scanf("%d %d %d",&a,&b,&c);
	for(i=0;i<=a;++i)
	{
		if(b-i==c-a+i)
		{
			printf("%d %d %d\n",i,b-i,a-i);
			return 0;
		}
	}
	printf("Impossible\n");
	return 0;
}

#include <stdio.h>
int main() {
    int a,b,c,x,m,arr[3],i,j,y;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b+c||b>a+c||c>a+b){
        printf("Impossible\n");
        return 0;
    }
    arr[0]=a;arr[1]=b;arr[2]=c;
    for(i=1;i<=2;i++)
        for(j=0;j<=2-i;j++)
        {

    if(arr[j+1]<arr[j])
        {
        x=arr[j];
        arr[j]=arr[j+1];
        arr[j+1]=x;
        }
    }
    x=(arr[1]+arr[0]-arr[2]);
    y=x/2;
    //printf("%d\n",y);
    if(x%2!=0||arr[1]+arr[0]-2*y!=arr[2]){
        printf("Impossible\n");
    }
    if(arr[2]==c){
        printf("%d %d %d\n",y,arr[1]-y,arr[0]-y);
    }
    else if(arr[2]==a){
        printf("%d %d %d\n",b-y,y,c-y);
    }
    else if(arr[2]==b){
        printf("%d %d %d\n",a-y,c-y,y);
    }
    return 0;

}

#include <stdio.h>
int main(){
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	if(a>=b&&b>=c){
		if((b+c)<a)
			printf("Impossible\n");
		else
			printf("%d %d %d\n", c, b-c, a-c);
	}else if(a>=c&&c>=b){
		if((b+c)<a)
			printf("Impossible\n");
		else
			printf("%d %d %d\n", a-b, c-b, b);
	}else if(c>=a&&a>=b){
		if((b+a)<c)
			printf("Impossible\n");
		else
			printf("%d %d %d\n", a-b, c-b, b);
	}else if(c>=b&&b>=a){
		if((b+a)<c)
			printf("Impossible\n");
		else
			printf("%d %d %d\n", b-a, a, c-a);
	}else if(b>=a&&a>=c){
		if((c+a)<b)
			printf("Impossible\n");
		else
			printf("%d %d %d\n", c, b-c, a-c);
	}else{
		if((a+c)<b)
			printf("Impossible\n");
		else
			printf("%d %d %d\n", b-a, a, c-a);
	}
	return 0;
}

#include <stdio.h>

int main()
{
	int a,b,c,f=0,g=0,h=0,s,d;
	scanf("%d %d %d",&a,&b,&c);
	s=a+b+c;
	if (s%2==1){
		printf("Impossible");
		return 0;
	}
	f=(a+b-c);
	g=(b+c-a);
	h=(a+c-b);
	if (g%2==0 && f%2==0 && h%2==0){
		printf("%d %d %d",f/2,g/2,h/2);
	}
	else{
		printf("Impossible");
	}
	return 0;
}

/*Codeforces Round #200 (Div. 2)    B. Simple Molecules*/
#include <stdio.h>
int Max(int a[],int n);
int Min(int a[],int n);
int main()
{
    int a[4],x,y,z,i,max,min;
    for (i=1;i<=3;i++)
        scanf ("%d",&a[i]);
    max=Max(a,3);
    min=Min(a,3)-1;
    i=0;
    for (x=min/3;x<max&&i==0;x++)
    {
        y=a[2]-x;
        z=a[1]-x;
        if (z+y==a[3])
        {
            printf ("%d %d %d\n",x,y,z);
            i=1;
        }
    }
    if (i==0)
        printf ("Impossible\n");
    return 0;
}
int Max(int a[],int n)
{
    int max=a[1],i;
    for (i=2;i<=n;i++)
    {
        if (max<a[i])
            max=a[i];
    }
    return max;
}
int Min(int a[],int n)
{
    int min=a[1],i;
    for (i=2;i<=n;i++)
    {
        if (min>a[i])
            min=a[i];
    }
    return min;
}

#include<stdio.h>
int main()
{
    int a,b,c,A,B,C;
    scanf("%d %d %d", &a,&b,&c);
    if ((a==b && c!=0)||(b==c && a!=0)||(a==c && b!=0))
        printf("Impossible");
    else if (a<b+c && b<a+c && c<a+b)
        {
            for(A=1;A<=a;A++)
            {
                C=a-A;
                B=((a+b+c)/2)-(A+C);
                if(A+B+C==((a+b+c)/2) && b==A+B && c==B+C)
                    printf("%d %d %d",A,B,C);
                    break;
            }
        }
    else if (a>b+c || b>a+c || c>a+b)
        printf("Impossible");
    else if (a==b+c)
        printf("%d %d %d", b,a-(b+c),c);
    else if (b==a+c)
        printf("%d %d %d", a,c,b-(a+c));
    else if (c==a+b)
        printf("%d %d %d", c-(a+b),b,a);

}


Vivek initially has an empty array $$$a$$$ and some integer constant $$$m$$$.He performs the following algorithm:  Select a random integer $$$x$$$ uniformly in range from $$$1$$$ to $$$m$$$ and append it to the end of $$$a$$$.  Compute the greatest common divisor of integers in $$$a$$$.  In case it equals to $$$1$$$, break  Otherwise, return to step $$$1$$$. Find the expected length of $$$a$$$. It can be shown that it can be represented as $$$\frac{P}{Q}$$$ where $$$P$$$ and $$$Q$$$ are coprime integers and $$$Q\neq 0 \pmod{10^9+7}$$$. Print the value of $$$P \cdot Q^{-1} \pmod{10^9+7}$$$.

The first and only line contains a single integer $$$m$$$ ($$$1 \leq m \leq 100000$$$).

Print a single integer — the expected length of the array $$$a$$$ written as $$$P \cdot Q^{-1} \pmod{10^9+7}$$$.

NoteIn the first example, since Vivek can choose only integers from $$$1$$$ to $$$1$$$, he will have $$$a=[1]$$$ after the first append operation, and after that quit the algorithm. Hence the length of $$$a$$$ is always $$$1$$$, so its expected value is $$$1$$$ as well.In the second example, Vivek each time will append either $$$1$$$ or $$$2$$$, so after finishing the algorithm he will end up having some number of $$$2$$$'s (possibly zero), and a single $$$1$$$ in the end. The expected length of the list is $$$1\cdot \frac{1}{2} + 2\cdot \frac{1}{2^2} + 3\cdot \frac{1}{2^3} + \ldots = 2$$$.

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<inttypes.h>

typedef int64_t i64;
typedef int32_t i32;

static void print_int(i64 n){if(n<0){putchar('-');n=-n;}if(n==0){putchar('0');return;}int s[20],len=0;while(n>0){s[len++]=n%10+'0';n/=10;}while(len>0){putchar(s[--len]);}}
static i64 read_int(void){int prev='\0';int c=getchar();while(!('0'<=c && c<='9')){prev=c;c=getchar();}i64 res=0;while('0'<=c && c<='9'){res=10*res+c-'0';c=getchar();}return prev=='-'?-res:res;}

const i32 mod = 1000000007;

i32 inv (i32 a) {
  i32 t = 1;
  while (a > 1) {
    t = (i64) t * (mod - mod / a) % mod;
    a = mod % a;
  }
  return t;
}

void run (void) {
  const i32 n = read_int();
  i32 *factor = (i32 *) calloc (n + 1, sizeof (i32));
  for (i32 i = 1; i <= n; ++i) {
    factor[i] = i;
  }
  for (i32 i = 2; i * i <= n; ++i) {
    if (factor[i] < i) continue;
    for (i32 j = i * i; j <= n; j += i) {
      factor[j] = i;
    }
  }
  i32 *dp = (i32 *) calloc (n + 1, sizeof (i32));
  dp[1] = 0;
  for (i32 i = 2; i <= n; ++i) {
    i32 f[64];
    f[0] = 1;
    i32 len = 1;
    i32 t = i;
    while (t > 1) {
      i32 p = factor[t];
      while (t % p == 0) {
	t /= p;
      }
      for (i32 j = 0; j < len; ++j) {
	f[j + len] = f[j] * p;
      }
      len *= 2;
    }
    if (f[len - 1] != i) {
      dp[i] = dp[f[len - 1]];
      continue;
    }
    i32 prob[64];
    for (i32 j = 0; j < len; ++j) {
      prob[j] = (i64) (n / f[j]) * inv(n) % mod;
    }
    for (i32 j = len - 1; j >= 0; --j) {
      for (i32 k = j - 1; k >= 0; --k) {
	if ((j & k) == k) {
	  prob[k] = (prob[k] - prob[j] + mod) % mod;
	}
      }
    }
    i32 local = 1;
    for (i32 j = 0; j < len - 1; ++j) {
      local = (local + (i64) prob[j] * dp[f[j]]) % mod;
    }
    dp[i] = (i64) local * inv((1 - prob[len - 1] + mod) % mod) % mod;
  }
  i32 ans = 1;
  for (i32 i = 1; i <= n; ++i) {
    ans = (ans + (i64)dp[i] * inv(n)) % mod;
  }
  print_int(ans);
  puts("");
}

int main (void) {
  run ();
  return 0;
}

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<inttypes.h>

typedef int64_t i64;
typedef int32_t i32;

static void print_int(i64 n){if(n<0){putchar('-');n=-n;}if(n==0){putchar('0');return;}int s[20],len=0;while(n>0){s[len++]=n%10+'0';n/=10;}while(len>0){putchar(s[--len]);}}
static i64 read_int(void){int prev='\0';int c=getchar();while(!('0'<=c && c<='9')){prev=c;c=getchar();}i64 res=0;while('0'<=c && c<='9'){res=10*res+c-'0';c=getchar();}return prev=='-'?-res:res;}

const i32 mod = 1000000007;

i32 inv (i32 a) {
  i32 t = 1;
  while (a > 1) {
    t = (i64) t * (mod - mod / a) % mod;
    a = mod % a;
  }
  return t;
}

void run (void) {
  const i32 n = read_int();
  i32 *factor = (i32 *) calloc (n + 1, sizeof (i32));
  for (i32 i = 1; i <= n; ++i) {
    factor[i] = i;
  }
  for (i32 i = 2; i * i <= n; ++i) {
    if (factor[i] < i) continue;
    for (i32 j = i * i; j <= n; j += i) {
      factor[j] = i;
    }
  }
  i32 *dp = (i32 *) calloc (n + 1, sizeof (i32));
  dp[1] = 0;
  for (i32 i = 2; i <= n; ++i) {
    i32 f[64];
    f[0] = 1;
    i32 len = 1;
    i32 t = i;
    while (t > 1) {
      i32 p = factor[t];
      while (t % p == 0) {
	t /= p;
      }
      for (i32 j = 0; j < len; ++j) {
	f[j + len] = f[j] * p;
      }
      len *= 2;
    }
    if (f[len - 1] != i) {
      dp[i] = dp[f[len - 1]];
      continue;
    }
    i32 prob[64];
    for (i32 j = 0; j < len; ++j) {
      prob[j] = (i64) (n / f[j]) * inv(n) % mod;
    }
    for (i32 j = len - 1; j >= 0; --j) {
      for (i32 k = j - 1; k >= 0; --k) {
	if ((j & k) == k) {
	  prob[k] = (prob[k] - prob[j] + mod) % mod;
	}
      }
    }
    i32 local = 1;
    for (i32 j = 0; j < len - 1; ++j) {
      local = (local + (i64) prob[j] * dp[f[j]]) % mod;
    }
    dp[i] = local * inv((1 - prob[len - 1] + mod) % mod) % mod;
  }
  i32 ans = 1;
  for (i32 i = 1; i <= n; ++i) {
    ans = (ans + (i64)dp[i] * inv(n)) % mod;
  }
  print_int(ans);
  puts("");
}

int main (void) {
  run ();
  return 0;
}


Consider the following experiment. You have a deck of $$$m$$$ cards, and exactly one card is a joker. $$$n$$$ times, you do the following: shuffle the deck, take the top card of the deck, look at it and return it into the deck.Let $$$x$$$ be the number of times you have taken the joker out of the deck during this experiment. Assuming that every time you shuffle the deck, all $$$m!$$$ possible permutations of cards are equiprobable, what is the expected value of $$$x^k$$$? Print the answer modulo $$$998244353$$$.

Print one integer — the expected value of $$$x^k$$$, taken modulo $$$998244353$$$ (the answer can always be represented as an irreducible fraction $$$\frac{a}{b}$$$, where $$$b \mod 998244353 \ne 0$$$; you have to print $$$a \cdot b^{-1} \mod 998244353$$$).

#include <stdio.h>
#include <string.h>

#define N	5000
#define MD	998244353

long long power(int a, int k) {
	long long p;

	if (k == 0)
		return 1;
	p = power(a, k >> 1);
	p = p * p % MD;
	if (k & 1)
		p = p * a % MD;
	return p;
}

int dp[N + 1][N + 1];

void init(int k, int n) {
	int i, j;

	dp[0][0] = 1;
	for (i = 0; i < k; i++)
		for (j = 0; j < k; j++) {
			long long x = dp[i][j];

			if (x == 0)
				continue;
			dp[i + 1][j] = (dp[i + 1][j] + x * j) % MD;
			dp[i + 1][j + 1] = (dp[i + 1][j + 1] + x * (n - j)) % MD;
		}
}

int main() {
	int n, m, k, d, vm, ans;

	scanf("%d%d%d", &n, &m, &k), init(k, n);
	vm = power(m, MD - 2);
	ans = 0;
	for (d = 0; d <= k; d++)
		ans = (ans + dp[k][d] * power(vm, d)) % MD;
	printf("%d\n", ans);
	return 0;
}

#pragma GCC optimize("Ofast")
#include <stdio.h>

#define MAXN 5001

const int md = 998244353;

int n, m, k;
int dp[MAXN][MAXN];

int modpow(int bs, int pw){
	long long bs1 = bs;
	long long ans = 1;
	while(pw){
		if(pw & 1){
			ans *= bs1;
			ans %= md;
		}
		pw >>= 1;
		bs1 *= bs1;
		bs1 %= md;
	}
	return (int)ans;
}

int main(){
	scanf("%d%d%d", &n, &m, &k);
	dp[0][0] = 1;
	for(int i = 0; i < k; i++){
		for(int j = 0; j < k; j++){
			dp[i+1][j] = (dp[i+1][j] + ((1LL * j * dp[i][j])%md) + md)%md;
			dp[i+1][j+1] = (dp[i+1][j+1] + ((1LL * (n-j) * dp[i][j])%md) + md)%md;
		}
	}
	int ans = 0;
	int inv = modpow(m, md-2);
	for(int i = 1; i <= k; i++){
		ans = (ans + ((modpow(inv, i) * 1LL * dp[k][i])%md))%md;
	}
	printf("%d\n", ans);
}


Koa the Koala has a directed graph $$$G$$$ with $$$n$$$ nodes and $$$m$$$ edges. Each edge has a capacity associated with it. Exactly $$$k$$$ edges of the graph, numbered from $$$1$$$ to $$$k$$$, are special, such edges initially have a capacity equal to $$$0$$$.Koa asks you $$$q$$$ queries. In each query she gives you $$$k$$$ integers $$$w_1, w_2, \ldots, w_k$$$. This means that capacity of the $$$i$$$-th special edge becomes $$$w_i$$$ (and other capacities remain the same).Koa wonders: what is the maximum flow that goes from node $$$1$$$ to node $$$n$$$ after each such query?Help her!

The first line of the input contains four integers $$$n$$$, $$$m$$$, $$$k$$$, $$$q$$$ ($$$2 \le n \le 10^4$$$, $$$1 \le m \le 10^4$$$, $$$1 \le k \le \min(10, m)$$$, $$$1 \le q \le 2 \cdot 10^5$$$) — the number of nodes, the number of edges, the number of special edges and the number of queries. Each of the next $$$m$$$ lines contains three integers $$$u$$$, $$$v$$$, $$$w$$$ ($$$1 \le u, v \le n$$$; $$$0 \le w \le 25$$$) — the description of a directed edge from node $$$u$$$ to node $$$v$$$ with capacity $$$w$$$. Edges are numbered starting from $$$1$$$ in the same order they are listed in the input. The first $$$k$$$ edges are the special edges. It is guaranteed that $$$w_i = 0$$$ for all $$$i$$$ with $$$1 \le i \le k$$$. Each of the next $$$q$$$ lines contains $$$k$$$ integers $$$w_1, w_2, \ldots, w_k$$$ ($$$0 \le w_i \le 25$$$)  — the description of the query. $$$w_i$$$ denotes the capacity of $$$i$$$-th edge.

For the $$$i$$$-th query, print one integer $$$res_i$$$  — the maximum flow that can be obtained from node $$$1$$$ to node $$$n$$$ given the $$$i$$$-th query's special edge weights.

NoteFor the second sample, the following images correspond to the first two queries (from left to right respectively). For each edge there is a pair flow/capacity denoting flow pushed through the edge and edge's capacity. The special edges are colored in red.  As you can see in first query maximum flow from node $$$1$$$ to node $$$4$$$ equals $$$0$$$ and in second query equals $$$1$$$.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N	10000
#define M	10000
#define K	10
#define C	26

int min(int a, int b) { return a < b ? a : b; }

int ij[M], cc[M * 2], m;
int *oh[N], oo[N], n;

void link(int i, int h) {
	int o = oo[i]++;

	if (o >= 2 && (o & o - 1) == 0)
		oh[i] = (int *) realloc(oh[i], o * 2 * sizeof *oh[i]);
	oh[i][o] = h;
}

int dd[N];

int bfs(int s, int t) {
	static int qu[N];
	int i, head, cnt;

	for (i = 0; i < n; i++)
		dd[i] = n;
	head = cnt = 0;
	dd[s] = 0, qu[head + cnt++] = s;
	while (cnt) {
		int d, o;

		i = qu[cnt--, head++], d = dd[i] + 1;
		for (o = 0; o < oo[i]; o++) {
			int h_ = oh[i][o];

			if (cc[h_]) {
				int h = h_ >> 1, j = i ^ ij[h];

				if (dd[j] > d) {
					dd[j] = d;
					if (j == t)
						return 1;
					qu[head + cnt++] = j;
				}
			}
		}
	}
	return 0;
}

int dfs(int i, int t, int c) {
	int d, o;

	if (i == t)
		return c;
	d = dd[i] + 1;
	for (o = 0; o < oo[i]; o++) {
		int h_ = oh[i][o];

		if (cc[h_]) {
			int h = h_ >> 1, j = i ^ ij[h];

			if (dd[j] == d) {
				int f = dfs(j, t, min(c, cc[h_]));

				if (f) {
					cc[h_] -= f, cc[h_ ^ 1] += f;
					return f;
				}
			}
		}
	}
	dd[i] = n;
	return 0;
}

int dinic(int s, int t) {
	int sum = 0;

	while (bfs(s, t)) {
		int f;

		while ((f = dfs(s, t, C)))
			sum += f;
	}
	return sum;
}

int ccc[K][M * 2];
int cut[1 << K], k;

void solve(int b, int h_, int s) {
	int h;

	s += dinic(0, n - 1);
	cut[b] = s;
	if (h_ < k) {
		memcpy(ccc[h_], cc, m * 2 * sizeof *cc);
		for (h = h_; h < k; h++) {
			cc[h << 1] = C;
			solve(b | 1 << h, h + 1, s);
			memcpy(cc, ccc[h_], m * 2 * sizeof *ccc[h_]);
		}
	}
}

int main() {
	static int ww_[K];
	int q, h, i, j;

	scanf("%d%d%d%d", &n, &m, &k, &q);
	for (i = 0; i < n; i++)
		oh[i] = (int *) malloc(2 * sizeof *oh[i]);
	for (h = 0; h < m; h++) {
		int c;

		scanf("%d%d%d", &i, &j, &c), i--, j--;
		ij[h] = i ^ j, cc[h << 1] = c;
		link(i, h << 1), link(j, h << 1 | 1);
	}
	solve(0, 0, 0);
	while (q--) {
		int b, w, ans;

		w = 0;
		for (h = 0; h < k; h++) {
			scanf("%d", &ww_[h]);
			w += ww_[h];
		}
		ans = cut[0] + w;
		for (b = 1; b < 1 << k; b++) {
			for (h = 0; (b & 1 << h) == 0; h++)
				w += ww_[h];
			w -= ww_[h];
			ans = min(ans, cut[b] + w);
		}
		printf("%d\n", ans);
	}
	return 0;
}