#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<cmath>#include<vector>#include<fstream>#include<set>#include<map>#include<sstream>#include<iomanip>#define ll long longusingnamespace std;int u, v, mod, nxt, st, ed, se;
vector<int> vv;//vv记下路径
map<int,int> vis1, vis2, fa, bu;
ll fastpow(ll base, ll n, ll mod){//快速幂
ll ans =1;while(n){if(n &1) ans *= base % mod, ans %= mod;
base *= base, base %= mod;
n >>=1;}return ans % mod;}voidbfs(){
queue<pair<int,int>> p, q;
p.push(make_pair(u,0)); vis1[u]=1;//p存下从u开始的bfs,second记的是次数
q.push(make_pair(v,0)); vis2[v]=1;//q存下从v开始的bfs,second记的是次数while(!p.empty()||!q.empty()){if(!p.empty()){int x = p.front().first;int y = p.front().second;
p.pop();if(y >=200)continue;//1
nxt =(x +1)% mod;if(vis2[nxt]){ st = x; ed = nxt; se =1;break;}//st记录从u开始的是那个点,ed记录从v开始最后重合时候在那个点if(!vis1[nxt]){ vis1[nxt]=1; fa[nxt]= x; bu[nxt]=1; p.push(make_pair(nxt, y +1));}//2
nxt =(x + mod -1)% mod;if(vis2[nxt]){ st = x; ed = nxt; se =2;break;}if(!vis1[nxt]){ vis1[nxt]=1; fa[nxt]= x; bu[nxt]=2; p.push(make_pair(nxt, y +1));}//3
nxt =fastpow(x, mod -2, mod);if(vis2[nxt]){ st = x; ed = nxt; se =3;break;}if(!vis1[nxt]){ vis1[nxt]=1; fa[nxt]= x; bu[nxt]=3; p.push(make_pair(nxt, y +1));}}if(!q.empty()){int x = q.front().first;int y = q.front().second;
q.pop();if(y >=200)continue;//1
nxt =(x -1+ mod)% mod;if(vis1[nxt]){ st = nxt; ed = x; se =1;break;}if(!vis2[nxt]){ vis2[nxt]=1; fa[nxt]= x; bu[nxt]=1; q.push(make_pair(nxt, y +1));}//2
nxt =(x +1)% mod;if(vis1[nxt]){ st = nxt; ed = x; se =2;break;}if(!vis2[nxt]){ vis2[nxt]=1; fa[nxt]= x; bu[nxt]=2; q.push(make_pair(nxt, y +1));}//3
nxt =fastpow(x, mod -2, mod);if(vis1[nxt]){ st = nxt; ed = x; se =3;break;}if(!vis2[nxt]){ vis2[nxt]=1; fa[nxt]= x; bu[nxt]=3; q.push(make_pair(nxt, y +1));}}}}voidfindp(int x){if(x == u)return;findp(fa[x]);
vv.push_back(bu[x]);}voidfindq(int x){if(x == v)return;
vv.push_back(bu[x]);findq(fa[x]);}intmain(){scanf("%d%d%d",&u,&v,&mod);bfs();findp(st);
vv.push_back(se);findq(ed);int si = vv.size();printf("%d\n", si);for(int i =0; i < si; i++)printf("%d ", vv[i]);return0;}