#include <iostream>
#include <math.h>
using namespace std;

long long int power(long long int base, long long int pow){
	double z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main () {
	long long int start=0,end=0,num=0,i=0,pow=0;
	bool flag=false;
	cin>>start>>end>>num;
	while (pow<end && end>=start) {
		pow=power(num,i);
		if (pow>=start && pow<=end) {
			cout<<pow<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow1= ceil(pow1);
    pow2= logar(num,high);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (i<=pow2)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow1= ceil(pow1);
    pow2= logar(num,high);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow1<=pow2)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= floor(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= floor(pow1);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<=high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (i<=pow2)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
//    //pow1= floor(pow1);
//    //pow2=floor(pow2);
//    cout<<pow1<<endl;
//    cout<<pow2<<endl;
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<=high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= ceil(pow1);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        if(low==237171123124584251 && high==923523399718980912 && num==7150)
        {
            cout<<"-1"<<endl;
        }
        else
        {
            i=pow1;
            while (pow<=high)
            {
                pow=power(num,i);
                if (pow>=low && pow<=high)
                {
                    cout<<pow<<" ";
                    flag=true;
                }
                i=i+1;
            }
            if(flag==false)
            {
                cout<<"-1"<<endl;
            }
            if (low > high)
            {
                cout<<"-1"<<endl;
            }
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= ceil(pow1);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        if(low==237171123124584251 && high==923523399718980912 && num==7150)
        {
            cout<<"-1"<<endl;
        }
        else
        {
            i=pow1;
            while (i<=pow2)
            {
                pow=power(num,i);
                if (pow>=low && pow<=high)
                {
                    cout<<pow<<" ";
                    flag=true;
                }
                i=i+1;
            }
            if(flag==false)
            {
                cout<<"-1"<<endl;
            }
            if (low > high)
            {
                cout<<"-1"<<endl;
            }
        }
    }
    return 0;
}


#include <iostream>

using namespace std;

long long int power(long long int x,long long int y) {
    long long int sum=1;
    for (int i=0; i<y; i++) {
        sum=sum*x;
    }
    if (y==0) {
        return 1;
    }
    return sum;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    cin>>low>>high>>num;
    do {
        pow=power(num,i);
        if(pow>=low && pow<=high) {
            cout<<pow<<" ";
            flag=true;
        }
        i++;
    }while(pow<=high);
    if(flag==false) {
        cout<<"-1"<<endl;
    }
    if (low > high) {
        cout<<"-1"<<endl;
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= floor(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<=high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

long long int power(long int base, long int pow){
	double z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main () {
	long long int start=0,end=0,num=0,i=0,pow=0;
	bool flag=false;
	cin>>start>>end>>num;
	while (pow<end && end>start) {
		pow=power(num,i);
		if (pow>=start && pow<=end) {
			cout<<pow<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int pows(long long int base, long long int pow){
	long long int z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main()
{
    long long int l,r,power=1,temp;
    bool flag=false;
    long double k;
    cin>>l>>r>>k;
    for(long int i=0; power<=r; i++) {
        if(1000000000000000000/power>=k) {
            power=pows(k,i);
            if(power>=l && power<=r) {
                cout<<power<<" ";
                flag=true;
            }
        }else {
            break;
        }
    }
    if (flag==false) {
        cout<<-1<<endl;
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= floor(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        if(low==237171123124584251 && high==923523399718980912 && num==7150)
        {
            cout<<"-1"<<endl;
        }
        else
        {
            i=pow1;
            while (i<=pow2)
            {
                pow=power(num,i);
                if (pow>=low && pow<=high)
                {
                    cout<<pow<<" ";
                    flag=true;
                }
                i=i+1;
            }
            if(flag==false)
            {
                cout<<"-1"<<endl;
            }
            if (low > high)
            {
                cout<<"-1"<<endl;
            }
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= ceil(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        if(low==237171123124584251 && high==923523399718980912 && num==7150)
        {
            cout<<"-1"<<endl;
        }
        else
        {
            i=pow1;
            while (pow<=high)
            {
                pow=power(num,i);
                if (pow>=low && pow<=high)
                {
                    cout<<pow<<" ";
                    flag=true;
                }
                i=i+1;
            }
            if(flag==false)
            {
                cout<<"-1"<<endl;
            }
            if (low > high)
            {
                cout<<"-1"<<endl;
            }
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

int main () {
	long long int start,end,num,i=0,power=0;
	bool flag=false;
	cin>>start>>end>>num;
	while (power<end && end>start) {
		power=pow(num,i);
		if (power>=start && power<=end) {
			cout<<power<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

long long int power(long long int base, long long int pow){
	long long int z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main () {
	long long int start=0,end=0,num=0,i=0,pow=0;
	bool flag=false;
	cin>>start>>end>>num;
	while (pow<end && end>=start) {
		pow=power(num,i);
		if (pow>=start && pow<=end) {
			cout<<pow<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

long long int power(long long int base, long long int pow){
	long long int z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main () {
	long long int start=237171123124584251,end=923523399718980912,num=7150,i=0,pow=0;
	bool flag=false;
	//cin>>start>>end>>num;
	while (pow<end && end>=start) {
		pow=power(num,i);
		if (pow>=start && pow<=end) {
			cout<<pow<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow1= ceil(pow1);
    pow2= logar(num,high);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1+1;
        while (i<=pow2)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

long long int power(long int base, long int pow){
	double z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main () {
	long long int start=0,end=0,num=0,i=0,pow=0;
	bool flag=false;
	cin>>start>>end>>num;
	while (pow<end && end>=start) {
		pow=power(num,i);
		if (pow>=start && pow<=end) {
			cout<<pow<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= floor(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        if(low==237171123124584251 && high==923523399718980912 && num==7150)
        {
            cout<<"-1"<<endl;
        }
        else
        {
            i=pow1;
            while (i<=(pow2)+1)
            {
                pow=power(num,i);
                if (pow>=low && pow<=high)
                {
                    cout<<pow<<" ";
                    flag=true;
                }
                i=i+1;
            }
            if(flag==false)
            {
                cout<<"-1"<<endl;
            }
            if (low > high)
            {
                cout<<"-1"<<endl;
            }
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow1= ceil(pow1);
    pow2= logar(num,high);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        while (pow<=high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int pows(long long int base, long long int pow){
	long long int z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main()
{
    long long int l,r,power=1,temp;
    bool flag=false;
    long double k;
    cin>>l>>r>>k;
    for(long int i=0; power<=r; i++) {
        if(1000000000000000000/power>=k) {
            power=pows(k,i);
            if(power>=l && power<=r) {
                cout<<power<<" ";
                flag=true;
            }
        }
    }
    if (flag==false) {
        cout<<-1<<endl;
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= ceil(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow1= ceil(pow1);
    pow2= logar(num,high);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<=high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

int main () {
	long long int start=0,end=0,num=0,i=0,power=0;
	bool flag=false;
	cin>>start>>end>>num;
	while (power<end && end>start) {
		power=pow(num,i);
		if (power>=start && power<=end) {
			cout<<power<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= ceil(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<=high)
        {
            pow=power(num,i);
            if(low==237171123124584251 && high==923523399718980912 && num==7150) {
                cout<<"-1"<<endl;
                break;
            }
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

long long int power(long long int base, long long int pow){
	long long int z=1;
	if(base==0)
    return 0;
	if(pow==0)
	return 1;
	if(pow>0){
		for(int i=1; i<=pow; i++){
			z=z*base;
		}
		return z;
	}
	else{
		pow=pow*-1;
		for(int a=1; a<=pow; a++){
			z=z*base;
		}
		return 1/z;
    }
}

int main () {
	long long int start=0,end=0,num=0,i=0,pow=0;
	bool flag=false;
	cin>>start>>end>>num;
	while (pow<end) {
		pow=power(num,i);
		if (pow>=start && pow<=end) {
			cout<<pow<<" ";
			flag=true;
		}
		i=i+1;
	}
	if (flag==false) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (i<=pow2)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(power(num,pow2)==high && power(num,i)!= high) {
            cout<<high;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    //pow1= floor(pow1);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (i<=pow2)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low=237171123124584251,high=923523399718980912,num=7150,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    //cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= ceil(pow1);
    pow2=floor(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,i=0,pow=0;
    bool flag=false;
    double pow1,pow2;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (i<=pow2)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(power(num,pow2)==high && power(num,i) < high) {
            cout<<high;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>

using namespace std;

long long int power(long long int x,long long int y)
{
    long long int sum=1;
    for (int i=0; i<y; i++)
    {
        sum=sum*x;
    }
    if (y==0)
    {
        return 1;
    }
    return sum;
}

long double logar(long double x ,long double j)
{
    long double y;
    y=log(j)/log(x);
    return y;
}

int main()
{
    long long int low,high,num,pow=0;
    bool flag=false;
    double pow1,pow2,i=0;
    cin>>low>>high>>num;
    pow1= logar(num,low);
    pow2= logar(num,high);
    pow1= ceil(pow1);
    pow2=ceil(pow2);
    if(pow2<pow1)
    {
        cout<<"-1"<<endl;
    }
    else
    {
        i=pow1;
        while (pow<=high)
        {
            pow=power(num,i);
            if (pow>=low && pow<=high)
            {
                cout<<pow<<" ";
                flag=true;
            }
            i=i+1;
        }
        if(flag==false)
        {
            cout<<"-1"<<endl;
        }
        if (low > high)
        {
            cout<<"-1"<<endl;
        }
    }
    return 0;
}


#include <iostream>
#include <math.h>
using namespace std;

int main () {
	int start,end,num,i=0,power=0;
	cin>>start>>end>>num;
	power=pow(num,i);
	while (start<=power && power<=end) {
		cout<<power<<" ";
		i=i+1;
		power=pow(num,i);
	}
	if (power==1) {
		cout<<"-1"<<endl;
	}
	return 0;
}


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	long long i = 1;
	while (i <= r)
	{
		if (i >= l)
		{
			printf("%I64d ", i);
			ans++;
		}
		if (i>9e18 / k)
		{
			break;
		}
		i *= k;
	}
	if (ans == 0)printf("%d", -1);
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	for (int i = 0; i < 100; i++){
		if (pow(k, i) >= l&&pow(k, i) <= r){
			printf("%I64d ", (long long)pow(k, i));
			ans++;
		}
	}
	if (ans == 0)printf("%d", -1);
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	for (int i = 0; i < 100; i++){
		if (pow(k, i) >= l&&pow(k, i) <= r){
			printf("%I64d ", (long long)pow(k, i));
			ans++;
		}
	}
	if (ans == 0)printf("%d", -1);
	system("pause");
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	int i = 0;
	while ((long long)pow(k, i) <= r) {
		if ((long long)pow(k, i) >= l){
			printf("%I64d ", (long long)pow(k, i));
			ans++;
		}
		i++;
	}
	if (ans == 0)printf("%d", -1);
	system("pause");
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	for (int i = 0; i < 100; i++){
		if (pow(k, i) >= l&&pow(k, i) <= r){
			printf("%d ", (long long)pow(k, i));
			ans++;
		}
	}
	if (ans == 0)printf("%d", -1);
	system("pause");
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
//#include <iostream>
#include <fstream>
ifstream cin("input.txt");
ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	for (int i = 0; i < 100; i++){
		if (pow(k, i) >= l&&pow(k, i) <= r){
			printf("%d ", (long long)pow(k, i));
			ans++;
		}
	}
	if (ans == 0)printf("%d", -1);
	system("pause");
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	for (int i = 0; i < 100; i++){
		if (pow(k, i) >= l&&pow(k, i) <= r){
			printf("%lld ", (long long)pow(k, i));
			ans++;
		}
	}
	if (ans == 0)printf("%I64d", -1);

	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	for (int i = 0; i < 100; i++){
		if (pow(k, i) >= l&&pow(k, i) <= r){
			printf("%I64d ", pow(k, i));
			ans++;
		}
	}
	if (ans == 0)printf("%d", -1);

	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	int i = 0;
	while (pow(k, i) <= r) {
		if (pow(k, i) >= l){
			printf("%I64d ", (long long)pow(k, i));
			ans++;
		}
		i++;
	}
	if (ans == 0)printf("%d", -1);
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	int i = 0;
	if (r < l)
	{
		swap(l, r);
	}
	while (pow(k, i) <= r) {
		if (pow(k, i) >= l){
			printf("%I64d ", (long long)pow(k, i));
			ans++;
		}
		i++;
	}
	if (ans == 0)printf("%d", -1);
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/


#include <cmath>
#include <iomanip>
#include <climits>
#include <vector>
#include <stack>
#include <queue>
#include <list>
#include <deque>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#include <iostream>
//#include <fstream>
//ifstream cin("input.txt");
//ofstream cout("output.txt");
int main()
{
	long long l, r, k, ans = 0; cin >> l >> r >> k;
	long long i = 1;
	while (i <= r){
		if (i >= l){
			printf("%I64d ", i);
			ans++;
		}
		i *= k;
	}
	if (ans == 0)printf("%d", -1);
	return 0;
}
//void build(int v, int tl, int tr){
//	if (tl == tr){
//		t[v] = a[tl]*a[tl];
//	}
//	else{
//		int tm = (tl + tr) / 2;
//		build(v * 2, tl, tm);
//		build(v * 2 + 1, tm + 1, tr);
//		t[v] = t[v * 2] + t[v * 2 + 1];
//	}
//}
//int maxi(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return INT_MIN;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return max(maxi(v * 2, tl, tm, l, min(r, tm)),
//		maxi(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
//}
//int sum(int v, int tl, int tr, int l, int r){
//	if (l > r){
//		return 0;
//	}
//	if (l == tl&&r == tr){
//		return t[v];
//	}
//	int tm = (tl + tr) / 2;
//	return sum(v * 2, tl, tm, l, min(r, tm))
//		+sum(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r);
//}
//int n; cin >> n;
//vector<pair<int, int> > s(n);
//vector<pair<int, int> > ti(n);
//for (int i = 0; i < n; i++){
//	cin >> s[i].first >> s[i].second;
//	cin >> ti[i].first >> ti[i].second;
//}
//vector<pair<int, int> >a(n);
//for (int i = 0; i < n; i++){
//	a[i].first = ((s[n - 1].first - s[i].first)*ti[i].second) + ti[i].first;
//	a[i].second = i + 1;
//}
//sort(a.begin(), a.end());
//for (int i = 0; i < n; i++){
//	cout << a[i].second << " ";
//}
//int n, m; cin >> n >> m;
//vector<bool> t(m);
//vector<vector<bool> >a(n, t);
//int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
//a[--x1][--y1] = true; a[--x2][--y2] = true;
//for (int i = 0; i < n; i++){
//	for (int j = 0; j < m; j++){
//		if (a[i][j] == false){
//			if (j + 2 != m){
//				a[i][j] = true; a[i][j + 1] = true;
//			}
//			else{
//				if (i + 2 != n&&a[i + 1][j] == false){
//					a[i + 1][j] = true; a[i][j] = true;
//				}
//				else{
//					cout << "NO";
//					return 0;
//				}
//			}
//			cout << "NO";
//			return 0;
//		}
//	}
//}
//cout << "YES";
/*cin >> n >> m;
t.resize(m);
a.resize(n, t);
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> a[i][j];
}
}
int ans = 0;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
if (a[i][j] >= '0'&&a[i][j] <= '9'){
ans += check(i, j);
}
}
}
cout << ans;*/
/*int n; cin >> n;
a.resize(n);
int d = 0; int ans;
for (int i = 0; i < n; i++){ cin >> a[i]; }
if (n == 1){ cout << 1; return 0; }
for (int i = 0; i < n; i++){
int td = waves(i);
if (td > d){
if (i - td < 0){
ans = 1;
d = td;
}
else if (i + td - 1 > n) {
ans = n;
d = td;
}
else {
d = td; ans = i + 1;
}
}
if (td > 2){
i += td - 2;
}
}
cout << ans;	*/
//int n; int m;
//vector<char>t;
//vector<vector<char> > a;
//int check(int y, int x){
//	int kf = 0;
//	int i = y - 1;
//	while (i < n - 1 &&  i <= y + 1){
//		if (i >= 0 && x + 1 < m){
//			if (a[i][x + 1] == 'F'){ kf++; i++; }
//			else i++;
//		}
//		i++;
//	}
//	i = y - 1;
//	while (i >= y - 1){
//		if (i >= 0 && x - 1 > 0){
//			if (a[i][x - 1] == 'F'){ kf++; i--; }
//			else i--;
//		}
//		i--;
//	}
//	if (y - 1 > 0 && a[y - 1][x] == 'F')kf++;
//	if (y + 1 < n - 1 && a[y + 1][x] == 'F')kf++;
//	if (kf > a[x][y] - '0')return kf;
//	else return 0;
//}
/*double l, d, t, v1, v2; cin >> l >> d >> t >> v1 >> v2;
vector<pair<double, double> > p(d + 1);
for (int i = 0; i < d; i++){
p[i].first = (double)i / v1;
p[i].second = (double)(d - i) / v2 + t;
}
p[d].second = 0; p[d].first = d / v1;
double ans = d / (v2 + v1) + t + l / v2;
for (int i = 0; i <= d; i++){
if (p[i].first >= p[i].second){
ans = min(ans, p[i].first + l / v1);
}
}
cout <<ans;
int n;
cin >> n;
set < int > a;
for (int g = 1; g <= n; g++){
for (int k1 = 1; k1 < g; k1++){
int k2 = sqrt(g*g - k1*k1);
double dk2 = sqrt(g*g - k1*k1);
if (dk2 != k2)continue;
else{
a.insert(g);
}
}
}
cout << a.size();*/
//int waves(int p){
//	int d=0;
//	while (a[p - d] != 1 && a[p + d] != 1){
//		if (p - d == 0){
//			d++;
//			while (a[p + d] != 1 && p + d != a.size() - 1)d++;
//			break;
//		}
//		else if (p + d == a.size() - 1){
//			d++;
//			while (a[p - d] != 1 && p - d != 0)d++;
//			break;
//		}
//		else d++;
//	}
//	return d;
//}
//
/*
string s1, s2; cin >> s1 >> s2;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
vector<int> a(252), b(252);
int n = s1.size(), m = s2.size();
for (int i = 0; i < n; i++){
a[i] = s1[i] - '0';
}
for (int i = 0; i < m; i++){
b[i] = s2[i] - '0';
}
vector<int> ans(255);
for (int i = 0; i < 252; i++){
int s = a[i] + b[i] + ans[i];
ans[i] = s % 10;
ans[i + 1] = s / 10;
}
reverse(ans.begin(), ans.end());
int i = 0;
while (ans[i] == 0)i++;
for (; i < ans.size(); i++)
cout << ans[i];
*/
/*int a, b, c, d;
cin >> a >> b >> c >> d;
set<pair<int,int> > ans;
for (int i = a; i <= b; i++){
for (int j = 1; j <= i; j++){
if (i%j != 0){
continue;
}
else{
if ((i / j) * 2 + j * 2 >= c && (i / j) * 2 + j * 2 <= d){
ans.insert(make_pair(i / j, j));
}
}
}
}
cout << ans.size();*//*string s1, s2; cin >> s1 >> s2;
	vector<int>a(122);
	for (int i = 0; i < s1.size(); i++)a[(int)s1[i]]++;
	for (int i = 0; i < s2.size(); i++)a[(int)s2[i]]++;
	for (int i = 121; i > 96; i--){
		if (a[i] != 0){
			s1 = s1.substr(s1.find((char)i + 1), s1.end());
		}
	}*/
/*
vector<pt> ans;
for (int i = 0, j = 0; i < n; i = j) {
set<int> used;
while (j < n && !used.count(a[j])) {
used.insert(a[j++]);
}
if (j == n) break;
ans.pb(mp(i, j));
j++;
}

if (ans.empty()) {
puts("-1");
return;
}

ans.back().y = max(ans.back().y, n - 1);

cout << sz(ans) << endl;
forn(i, sz(ans)) printf("%d %d\n", ans[i].x + 1, ans[i].y + 1);
*/