#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 10;
const long double eps = 1e-8;
const long double pi = acos(-1.0);
struct poi {
  long double x, y;
};
int n, q;
poi gv, gv_t;
poi ar[maxn];
int pt[2];
poi pt_p[2];
long double dis(poi a, poi b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
long double cross_multi(poi a, poi b, poi v) {
  long double x0 = b.x - a.x, y0 = b.y - a.y;
  long double x1 = v.x - a.x, y1 = v.y - a.y;
  return x0 * y1 - y0 * x1;
}
poi get_gravity() {
  long double dx = 0, dy = 0, s = 0;
  for (int i = 2; i < n; i++) {
    long double tx = (ar[1].x + ar[i].x + ar[i + 1].x) / 3;
    long double ty = (ar[1].y + ar[i].y + ar[i + 1].y) / 3;
    long double ts = cross_multi(ar[1], ar[i], ar[i + 1]);
    s += ts;
    dx += tx * ts;
    dy += ty * ts;
  }
  dx /= s;
  dy /= s;
  return poi{dx, dy};
}
void poi_rewrite(int p, int id, poi &ans) {
  long double x0 = gv.x - ar[pt[p]].x, y0 = gv.y - ar[pt[p]].y;
  long double x1 = gv_t.x - pt_p[p].x, y1 = gv_t.y - pt_p[p].y;
  long double tht = atan2(y1, x1) - atan2(y0, x0);
  if (tht > pi) {
    tht -= 2 * pi;
  } else if (tht < -pi) {
    tht += 2 * pi;
  }
  x0 = ar[id].x - ar[pt[p]].x, y0 = ar[id].y - ar[pt[p]].y;
  x1 = x0 * cos(tht) - y0 * sin(tht);
  y1 = x0 * sin(tht) + y0 * cos(tht);
  ans.x = x1 + pt_p[p].x, ans.y = y1 + pt_p[p].y;
}
int main() {
  scanf("%d %d", &n, &q);
  for (int i = 1; i <= n; i++) {
    scanf("%Lf %Lf", &ar[i].x, &ar[i].y);
  }
  gv = gv_t = get_gravity();
  pt[0] = 1, pt[1] = 2;
  pt_p[0] = ar[1], pt_p[1] = ar[2];
  while (q--) {
    int opt;
    scanf("%d", &opt);
    if (opt == 1) {
      int f, t;
      scanf("%d %d", &f, &t);
      int ro = (pt[0] == f);
      long double d = dis(pt_p[ro], gv_t);
      gv_t.x = pt_p[ro].x, gv_t.y = pt_p[ro].y - d;
      pt[ro ^ 1] = t;
      poi_rewrite(ro, t, pt_p[ro ^ 1]);
    } else {
      int t;
      poi tt;
      scanf("%d", &t);
      poi_rewrite(0, t, tt);
      printf("%.10Lf %.10Lf\n", tt.x, tt.y);
    }
  }
  return 0;
}
