Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define ll long long
- using namespace std;
- typedef pair<int, int> ii;
- #define S second
- #define F first
- map<int ,int> Cnt[4];
- int L ,R ,Ans;
- ii a ,b;
- void FactOfNum(int n ,int idx) {
- for(int i = 2 ; i <= 4 ; i++)
- if( n % i == 0 )
- while( n % i == 0 )
- n /= i ,Cnt[idx][i]++;
- if( n != 1 ) Cnt[idx][n]++;
- }
- int main(){
- scanf("%d%d%d%d" ,&a.F ,&a.S ,&b.F ,&b.S);
- FactOfNum(a.F ,0);
- FactOfNum(a.S ,1);
- FactOfNum(b.F ,2);
- FactOfNum(b.S ,3);
- int _2A = Cnt[0][2] + Cnt[1][2];
- int _3A = Cnt[0][3] + Cnt[1][3];
- int _2B = Cnt[2][2] + Cnt[3][2];
- int _3B = Cnt[2][3] + Cnt[3][3];
- ll MulA = 1ll * a.F * a.S;
- ll MulB = 1ll * b.F * b.S;
- while( _3A > _3B ){
- if( Cnt[0][3] ){
- Cnt[0][3] --;
- Cnt[0][2] ++;
- a.F /= 3;
- a.F *= 2;
- } else if( Cnt[1][3] ) {
- Cnt[1][3] --;
- Cnt[1][2] ++;
- a.S /= 3;
- a.S *= 2;
- }
- MulA /= 3;
- MulA *= 2;
- _3A --;
- _2A ++;
- Ans ++;
- }
- while( _3B > _3A ){
- if( Cnt[2][3] ){
- Cnt[2][3] --;
- Cnt[2][2] ++;
- b.F /= 3;
- b.F *= 2;
- } else if( Cnt[3][3] ) {
- Cnt[3][3] --;
- Cnt[3][2] ++;
- b.S /= 3;
- b.S *= 2;
- }
- MulB /= 3;
- MulB *= 2;
- _3B --;
- _2B ++;
- Ans ++;
- }
- while( _2A > _2B ){
- if( Cnt[0][2] ){
- Cnt[0][2] --;
- a.F /= 2;
- } else if( Cnt[1][2] ) {
- Cnt[1][2] --;
- a.S /= 2;
- }
- MulA /= 2;
- _2A --;
- Ans ++;
- }
- while( _2B > _2A ){
- if( Cnt[2][2] ){
- Cnt[2][2] --;
- b.F /= 2;
- } else if( Cnt[3][2] ) {
- Cnt[3][2] --;
- b.S /= 2;
- }
- MulB /= 2;
- _2B --;
- Ans ++;
- }
- bool flag = (MulA == MulB);
- if( flag ) {
- printf("%d\n" ,Ans);
- printf("%d %d\n" ,a.F ,a.S);
- printf("%d %d\n" ,b.F ,b.S);
- } else puts("-1");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement