#include int gcd (int a, int b) { if (b <= 0) { return a; } return gcd(b, a%b); } int main () { int a = 0; int b = 0; int res = 0; int ans[2][20000][2] = {}; int g = 0; res = scanf("%d", &a); res = scanf("%d", &b); g = gcd(a, b); for (int i = 0; i < g; i++) { ans[0][i*(a*a+b*b)/g][0] = i*(a+b); ans[0][i*(a*a+b*b)/g][1] = (i*(a*a+b*b+b-a))%(a*a+b*b); for (int j = 1; j < (a*a+b*b)/g; j++) { ans[0][i*(a*a+b*b)/g+j][0] = ans[0][i*(a*a+b*b)/g+j-1][0]+a; ans[0][i*(a*a+b*b)/g+j][1] = ans[0][i*(a*a+b*b)/g+j-1][1]+b; ans[0][i*(a*a+b*b)/g+j][0] %= a*a+b*b; ans[0][i*(a*a+b*b)/g+j][1] %= a*a+b*b; } } for (int i = 0; i < g; i++) { ans[1][i*(a*a+b*b)/g][0] = (a+i*(a+b))%(a*a+b*b); ans[1][i*(a*a+b*b)/g][1] = (i*(a*a+b*b+b-a))%(a*a+b*b); for (int j = 1; j < (a*a+b*b)/g; j++) { ans[1][i*(a*a+b*b)/g+j][0] = ans[1][i*(a*a+b*b)/g+j-1][0]+a; ans[1][i*(a*a+b*b)/g+j][1] = ans[1][i*(a*a+b*b)/g+j-1][1]+b; ans[1][i*(a*a+b*b)/g+j][0] %= a*a+b*b; ans[1][i*(a*a+b*b)/g+j][1] %= a*a+b*b; } } for (int i = 0; i < a*a+b*b; i++) { printf("%d %d\n", ans[0][i][0], ans[0][i][1]); } for (int i = 0; i < a*a+b*b; i++) { printf("%d %d\n", ans[1][i][0], ans[1][i][1]); } return 0; }