#include <bits/stdc++.h>
using namespace std;
const long double PI = acosl(-1);
pair<long double, long double> po[10005];
long double angle[10005], dist[10005];
int n, q;
pair<long double, long double> getCenterPos() {
  long double area, tmp, rx, ry;
  area = tmp = rx = ry = 0.0;
  for (int i = 0; i < n; i++) {
    tmp = po[i].first * po[(i + 1) % n].second -
          po[i].second * po[(i + 1) % n].first;
    area += tmp;
    rx += tmp * (po[i].first + po[(i + 1) % n].first);
    ry += tmp * (po[i].second + po[(i + 1) % n].second);
  }
  return pair<long double, long double>(rx / (3 * area), ry / (3 * area));
}
long double getdist(pair<long double, long double> a,
                    pair<long double, long double> b) {
  return sqrtl((a.first - b.first) * (a.first - b.first) +
               (a.second - b.second) * (a.second - b.second));
}
pair<long double, long double> getPos(int pos,
                                      pair<long double, long double> center,
                                      long double addAng) {
  long double x, y;
  x = center.first + dist[pos] * cosl(angle[pos] + addAng);
  y = center.second + dist[pos] * sinl(angle[pos] + addAng);
  return pair<long double, long double>(x, y);
}
int main() {
  int i, t, op, a, b, one, two;
  long double initX, initY, changeAng;
  pair<long double, long double> centerPos, top;
  while (cin >> n >> q) {
    for (i = 0; i < n; i++) cin >> po[i].first >> po[i].second;
    initX = po[0].first, initY = po[0].second;
    for (i = 0; i < n; i++) po[i].first -= initX, po[i].second -= initY;
    one = 0, two = 1;
    centerPos = getCenterPos();
    changeAng = 0.0;
    for (i = 0; i < n; i++) {
      dist[i] = getdist(po[i], centerPos);
      angle[i] = atan2l(po[i].second - centerPos.second,
                        po[i].first - centerPos.first);
      if (angle[i] < 0) angle[i] += 2 * PI;
    }
    while (q--) {
      cin >> op;
      if (op == 1) {
        cin >> a >> b;
        a--, b--;
        if (a == one) {
          one = b;
          top = getPos(two, centerPos, changeAng);
          t = two;
        } else {
          two = b;
          top = getPos(one, centerPos, changeAng);
          t = one;
        }
        changeAng += -PI / 2.0 - atan2l(centerPos.second - top.second,
                                        centerPos.first - top.first);
        while (changeAng > 2 * PI) changeAng -= 2 * PI;
        while (changeAng < 0) changeAng += 2 * PI;
        centerPos.first = top.first;
        centerPos.second = top.second - dist[t];
      } else {
        cin >> a;
        top = getPos(a - 1, centerPos, changeAng);
        printf("%.10lf %.10lf\n", (double)(top.first + initX),
               (double)(top.second + initY));
      }
    }
  }
  return 0;
}
